【问题标题】:Pass Type to method?将类型传递给方法?
【发布时间】:2017-03-23 23:27:21
【问题描述】:

我需要一些帮助来指明正确的方向。我想创建一个可以处理不同类型的方法。我需要以某种方式传递这些类型并以某种方式使用它们。对此的任何指导都会很棒。这是方法,其中“TypeINeedToPassIn”是,是的,你猜对了,我需要传入的类型:

public static object MatchAccountType(string acctTypeStr)
{
    var acctTypes = SharedUtils.GetEnumValues<TypeINeedToPassIn>();

    foreach (TypeINeedToPassIn acctType in acctTypes)
    {
        if (acctTypeStr.ToUpper() == acctType.ToString().ToUpper())
        {
            return acctType;
        }
    }

    return null;
}

TIA

【问题讨论】:

  • 请看一下这个 MSDN 文档msdn.microsoft.com/en-us/library/twcad0zb.aspx
  • “泛型”是为此目的而构建的。
  • 重塑Enum.Parse()似乎需要做很多工作。
  • 所以你正在按名称进行枚举值查找?为什么不使用(通用)Enum.TryParse&lt;&gt; 方法?有一个忽略大小写的重载。
  • 我正在使用一些较旧的现有代码,但我愿意接受任何建议的改进。

标签: c#


【解决方案1】:

您可以使您的方法泛型以接受类型参数:

public static object MatchAccountType<T>(string acctTypeStr)

然后可以在方法内的代码中使用该类型:

public static object MatchAccountType<T>(string acctTypeStr)
{
    var acctTypes = SharedUtils.GetEnumValues<T>();

    foreach (T acctType in acctTypes)
    {
        if (acctTypeStr.ToUpper() == acctType.ToString().ToUpper())
        {
            return acctType;
        }
    }

    return null;
}

如果您需要在方法内的代码中与该类型进行更多交互,或者对可以使用的类型进行限制,则有more to it that you can investigate。但是只需要一个类型参数可以通过简单地使其成为一个泛型方法来完成。

【讨论】:

  • 也可以输入返回类型。 public static T MatchAccountType&lt;T&gt;。也许将T 限制为struct
  • @LeonardoChaia:好点子,可能object 返回类型也不是用户想要的,只是之前尝试的痕迹这项工作。
  • 谢谢你们,这正是我要找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 2011-01-01
相关资源
最近更新 更多