首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C#中仅将类型作为参数传递

在C#中仅将类型作为参数传递
EN

Stack Overflow用户
提问于 2012-06-09 04:20:26
回答 7查看 222K关注 0票数 150

假设这样做对我来说很方便:

代码语言:javascript
复制
foo.GetColumnValues(dm.mainColumn, int)
foo.GetColumnValues(dm.mainColumn, string)

其中GetColumns方法将根据传递的类型在内部调用不同的方法。

是的,我可以用布尔标志或类似的方式来做,我只是想知道是否有一种方法可以通过它,然后问:

typeof(arg1)或类似类型...

我还可以重写方法,使用泛型等-我知道有不同的方法可以做到这一点,我只是好奇这是否可能。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-06-09 04:22:43

有两种常见的方法。首先,您可以传递System.Type

代码语言:javascript
复制
object GetColumnValue(string columnName, Type type)
{
    // Here, you can check specific types, as needed:

    if (type == typeof(int)) { // ...

这将被称为:int val = (int)GetColumnValue(columnName, typeof(int));

另一种选择是使用泛型:

代码语言:javascript
复制
T GetColumnValue<T>(string columnName)
{
    // If you need the type, you can use typeof(T)...

这样做的优点是避免了装箱,并提供了一些类型安全,可以这样调用:int val = GetColumnValue<int>(columnName);

票数 246
EN

Stack Overflow用户

发布于 2012-06-09 04:22:22

foo.GetColumnValues(dm.mainColumn, typeof(string))

或者,您可以使用泛型方法:

代码语言:javascript
复制
public void GetColumnValues<T>(object mainColumn)
{
    GetColumnValues(mainColumn, typeof(T));
}

然后你可以像这样使用它:

代码语言:javascript
复制
foo.GetColumnValues<string>(dm.mainColumn);
票数 24
EN

Stack Overflow用户

发布于 2012-06-09 04:22:22

可以将类型作为参数传递,但要这样做,必须使用typeof

代码语言:javascript
复制
foo.GetColumnValues(dm.mainColumn, typeof(int))

该方法需要接受类型为Type的参数。

,其中GetColumns方法将根据传递的类型在内部调用不同的方法。

如果您想要此行为,则不应将类型作为参数传递,而应使用类型参数。

代码语言:javascript
复制
foo.GetColumnValues<int>(dm.mainColumn)
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10955579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档