C# 检查对象是否来自泛型类型(无论泛型参数类型如何) 公共类对 { 公共T密钥{get;set;} 公共U值{get;set;} 公共对(T键,U值) { 钥匙=钥匙; 价值=价值; } 公共重写字符串ToString() { if(密钥为Pair) { 返回$“{Key}”,它是{Value}的键; } 返回$“{Key}是{Value}的键”; } }
在ToString()中的if语句中,我只想检查Key是否是一对,T和U可以是任何类型C# 检查对象是否来自泛型类型(无论泛型参数类型如何) 公共类对 { 公共T密钥{get;set;} 公共U值{get;set;} 公共对(T键,U值) { 钥匙=钥匙; 价值=价值; } 公共重写字符串ToString() { if(密钥为Pair) { 返回$“{Key}”,它是{Value}的键; } 返回$“{Key}是{Value}的键”; } },c#,generics,casting,C#,Generics,Casting,在ToString()中的if语句中,我只想检查Key是否是一对,T和U可以是任何类型 我在这里使用object作为Pair的两个类型参数,但我没有进入if。您可以使用一个反射,检查底层键类型是否为泛型,是否有Pair public重写字符串ToString() { var type=Key.GetType(); 如果(type.IsGenericType&&type.GetGenericTypeDefinition().Equals(typeof(Pair))) { 返回$“{Key}”,它是
我在这里使用object作为Pair的两个类型参数,但我没有进入if。您可以使用一个反射,检查底层
键
类型是否为泛型,是否有Pair
public重写字符串ToString()
{
var type=Key.GetType();
如果(type.IsGenericType&&type.GetGenericTypeDefinition().Equals(typeof(Pair)))
{
返回$“{Key}”,它是{Value}的键;
}
返回$“{Key}是{Value}的键”;
}
Key is Pair
仅在T
和U
具有object
类型时才起作用,因为在C#类中不支持泛型变体(只有接口和委托才有这种可能性)您可以在此处使用反射,或者使基类或接口成为非泛型类或接口<代码>对由于通用差异而不起作用
public class Pair<T, U>
{
public T Key { get; set; }
public U Value { get; set; }
public Pair(T key, U value)
{
Key = key;
Value = value;
}
public override string ToString()
{
if (Key is Pair<object, object>)
{
return $"{Key} which is the key to {Value}";
}
return $"{Key} is the key to {Value}";
}
}