我有一個自定義的 Enum 類:
public abstract class Enum<T> where T : struct, IComparable
{
public T Id { get; }
public string Value { get; }
protected Enum(T id, string @value)
{
Id = id;
Value = @value;
}
}
還有一個繼承自這個類的類:
public sealed class Status : Enum<byte>
{
public static readonly Status Pending = new Status(0, "PENDING");
public static readonly Status Finished = new Status(1, "FINISHED");
private Status(byte id, string name) : base(id, name)
{
}
public static Status Create (string @value)
{
// some logic here
//return Wrapper.Wrap(Finished);
return Finished;
}
public static Wrapper<Status> CreateWrapper(string @value)
{
// some logic here
return Wrapper.Wrap(Finished);
}
}
現在我想在 AutoMapper 中制作一個自定義型別轉換器,以下轉換器作業正常:
public class StatusConverter<TType> : ITypeConverter<string, Enum<byte>>
{
public Enum<byte> Convert(string source, Enum<byte> destination, ResolutionContext context)
{
return Status.Create(source);
}
}
public class StatusConverter2<TValue> : ITypeConverter<string, Wrapper<Status>> // works fine
{
public Wrapper<Status> Convert(string source, Wrapper<Status> destination, ResolutionContext context)
{
return Status.CreateWrapper(source);
}
}
現在我創建了一個新的 Wrapper 類:
public class Wrapper
{
public static Wrapper<T> Wrap<T>(T @value)
{
return new Wrapper<T>(@value);
}
}
public class Wrapper<T>
{
T Value;
internal Wrapper(T @value)
{
Value = @value;
}
}
我想做以下事情:
public class StatusConverter3<TValue> : ITypeConverter<string, Wrapper<Enum<byte>>> // doesn't work with Enum<T>
{
public Wrapper<Enum<byte>> Convert(string source, Wrapper<Enum<byte>> destination, ResolutionContext context)
{
return Status.CreateWrapper(source);
}
}
我想創建一個泛型型別轉換器,但我收到一個錯誤,我無法從 隱式轉換Wrapper<Status>為Wrapper<Enum<byte>>。
這是我的問題的 dotnetfiddle 演示:https ://dotnetfiddle.net/xM9JVg
uj5u.com熱心網友回復:
您應該使用Covariant 泛型修飾符
介紹一個介面
public interface IWrapper<out T> { }在你的 Wrapper 上實作它
Wrapper<T> : IWrapper<T>在轉換器中使用介面而不是類
public class StatusConverter3<TValue> : ITypeConverter<string, IWrapper<Enum<byte>>>
請注意,在這種情況下,您Wrapper<T>將不被允許使用T作為輸入引數的方法
檢查前叉
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362180.html
