gpt4 book ai didi

c# - 错误的 Resharper 建议 "Use method InstanceOfType"?

转载 作者:行者123 更新时间:2023-11-30 14:55:59 25 4
gpt4 key购买 nike

对于未知类型的给定值,以下扩展方法尝试找到具有单个参数的构造函数,以便可以使用该值调用构造函数。

private static ConstructorInfo ConstructorThatTakesValue
(this Type thisType, object value)
{
return thisType.GetConstructors().FirstOrDefault(c =>
c.GetParameters().Count() == 1 &&
c.GetParameters().First().ParameterType.IsAssignableFrom(value.GetType()));
}

也就是说,如果var c = typeof(X).ConstructorThatTakesValue(y),那么我们可以通过

创建一个 x
var x = (X)c.Invoke(new object[] { y });

上面的代码就像一个魅力,但 Resharper 标记包含 IsAssignableFrom 的行并显示“使用方法 InstanceOfType”。它还提供了一个 QuickFix,字面上只是将 IsAssignableFrom 替换为 IsInstanceOfType,根据我的直觉,这与我试图实现的目标完全相反:

c.GetParameters().First().ParameterType.IsInstanceOfType(value.GetType()));

更可疑的是,此消息显示为“建议”,而不是警告等。也就是说,Resharper 似乎认为这种变化是一种简单的风格改进。

我也试图了解这两种方法的语义,但我也无法理解 MSDN 上文档的含义。我的理解是,如果 class A : B,则 B.GetType().IsAssignableFrom(A.GetType())A.GetType()。 IsInstanceOfType(B.GetType()).

最佳答案

一个使用类型,另一个使用其他实例,实际上一个调用另一个:

public virtual bool IsInstanceOfType(object o)
{
if (o == null)
{
return false;
}
return this.IsAssignableFrom(o.GetType());
}

关于c# - 错误的 Resharper 建议 "Use method InstanceOfType"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24137352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com