【问题标题】:C# Error when attempting to pass Type as parameter when method requires a type当方法需要类型时,尝试将类型作为参数传递时出现 C# 错误
【发布时间】:2016-12-12 21:55:51
【问题描述】:

作为一个测试用例,我创建了以下非常简单的方法:

public static object TestMethod(Type t)
    {
        return t;
    }

对于我试图通过它的类型,我创建了一个非常基本的类也作为测试:

public class TestClass
    {
        public string name { get; set; }
    }

最后我尝试正常调用该方法:

TestClass sample = TestMethod(TestClass);

但是,当 TestClass 作为 TestMethod 的参数传递时,我收到错误消息:“'TestClass' 是一种类型,在给定的上下文中无效。”

这对我来说毫无意义,因为所需的参数是一种类型。

【问题讨论】:

  • typeof 或 GetType() 会起作用,但更好的问题是你到底想要完成什么?这似乎是仿制药的绝佳机会。

标签: c# methods types parameters


【解决方案1】:

要使用您的方法,请这样做

TestClass sample = (TestClass)TestMethod(typeof(TestClass));

您的 Result 将是 Type 而不是 TestClass,因此您将收到 RuntimeException。

在已经存在的实例上使用

TestMethod(testClassInstance.GetType())

但是你想要达到什么目的呢?

【讨论】:

  • @MachineLearning 这个答案的最后一行是这里的重点。几乎肯定有更好的方法来实现 OP 正在尝试做的事情。
  • 碰一下,但你知道什么是技术债吗? ;)
  • @lok​​usking 最终目标是传入一个 json 字符串和一个充满属性的类,我在其中反序列化 json 字符串并用我正在调用的 API 的响应中的适当值填充该类
  • @JSArrakis 请考虑编辑您的问题,如果您需要更好地澄清它...
【解决方案2】:

试试这个:

TestClass sample = (TestClass)TestMethod(typeof(TestClass)); //notice the cast because the method is returning an object

技术债

上面的编译但是抛出了一个无效的转换异常:一个资深的专业应该告诉你的是你需要改变这个

public static object TestMethod(Type t)
{
    return Activator.CreateInstance(t); 
}

【讨论】:

    猜你喜欢
    • 2022-12-05
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多