如何在 C# 中在运行时转换泛型值?
How do I cast a generic value at runtime in C#?
我有一个通用结构,类似于
public struct Range<T>
并且有两个属性,From
和 To
,类型为 T
。
该结构还有一个成员,如:
public bool FromGreaterTo
{
get { return (bool)Comparer<T>.Default.Compare(From, To) > 0 };
}
我为这个结构的属性创建了一个ValidationAttribute
。
在 IsValid
方法的重写中,我知道它是类型 Range<>
和 T is int?
或其他类型。
如何动态转换 value
参数(实际上是 Range<>
属性)以便访问 FromGreaterTo
成员?
我已经尝试过
private Range<T> Cast<T> (object valueToCast, T genericType)
{
return (Range<T>)valueToCast;
}
其中抛出异常,表示此转换无效。
对此有什么想法或解决方法吗?
让Range成为class并给它一个抽象基数class.
public abstract class Range
{
public abstract bool FromGreaterTo { get; }
}
public class Range<T> : Range
{
// existing Range<T> code
}
然后您可以将 Range<T>
对象转换为 Range
对象并调用其 FromGreaterTo
属性.
我有一个通用结构,类似于
public struct Range<T>
并且有两个属性,From
和 To
,类型为 T
。
该结构还有一个成员,如:
public bool FromGreaterTo
{
get { return (bool)Comparer<T>.Default.Compare(From, To) > 0 };
}
我为这个结构的属性创建了一个ValidationAttribute
。
在 IsValid
方法的重写中,我知道它是类型 Range<>
和 T is int?
或其他类型。
如何动态转换 value
参数(实际上是 Range<>
属性)以便访问 FromGreaterTo
成员?
我已经尝试过
private Range<T> Cast<T> (object valueToCast, T genericType)
{
return (Range<T>)valueToCast;
}
其中抛出异常,表示此转换无效。
对此有什么想法或解决方法吗?
让Range成为class并给它一个抽象基数class.
public abstract class Range
{
public abstract bool FromGreaterTo { get; }
}
public class Range<T> : Range
{
// existing Range<T> code
}
然后您可以将 Range<T>
对象转换为 Range
对象并调用其 FromGreaterTo
属性.