.NET 7最近引入了接口IParsable
,我想检查它是否存在。一些测试将返回true
,如果T
实现了 IParsable<T>
,否则返回false
。
假设当T
有一个名为Parse
方法时,我想返回类型为T
的对象,例如:
T ParseAs<T>(string s)
{
if (typeof(IParsable<T>).IsAssignableFrom(typeof(T)))
{
return T.Parse(s);
}
else
{
//do something else...
}
}
我希望检查
T
是否实现了IParsable<T>
界面,并授予我对内部的Parse
和TryParse
方法的访问权限。但是,我似乎无法将T
用作IParsable
的类型参数,而是收到以下异常消息:
如果我尝试使用CS0314
不能在泛型类型或方法“IParsable<TSelf>”中使用类型“T
”作为类型参数“TSelf
”。从“T
”到“System.IParsable<T>”不存在装箱转换或类型参数转换。
is
,我也会收到上述错误。s is IParsable<T>
我该如何解决这个问题?
IParsable
是递归定义,因此您需要在说出is IParsable<T>
之前先确定T
是IParsable<T>
。 - GSerg