首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#是否可以将一个类型传递给一个方法,然后让该方法返回该类型的对象?

C#是否可以将一个类型传递给一个方法,然后让该方法返回该类型的对象?
EN

Stack Overflow用户
提问于 2010-01-15 21:14:02
回答 7查看 14K关注 0票数 9

这似乎是可能的。

代码语言:javascript
运行
复制
protected SameObjectTypeAsInputParameterObjectType GetAValue(someObject,TypeOrReturnObjectYouWant){

//check to see if someObject is null, if not, cast it and send the cast back

}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-15 21:25:03

在给定的示例中,只需执行以下操作可能会更好:

代码语言:javascript
运行
复制
MyClass val = myObject as MyClass;

然而,为了回答你的问题-是的,答案是使用泛型:

代码语言:javascript
运行
复制
protected T GetAValue<T>(object someObject)
{
    if (someObject is T)
    {
        return (T)someObject;
    }
    else
    {
        // We cannot return null as T may not be nullable
        // see http://stackoverflow.com/questions/302096/how-can-i-return-null-from-a-generic-method-in-c
        return default(T); 
    }
}

在此方法中,T是类型的参数。您可以在代码中以与使用任何其他类型(例如字符串)完全相同的方式使用T,但是请注意,在这种情况下,我们没有对T是什么进行任何限制,因此类型T的对象只具有基本object的属性和方法(GetType()ToString()等)。

显然,我们必须先声明T是什么,然后才能使用它-例如:

代码语言:javascript
运行
复制
MyClass val = GetAValue<MyClass>(myObject);
string strVal = GetAValue<string>(someObject);

有关更多信息,请查看MSDN documentation on Generics

票数 11
EN

Stack Overflow用户

发布于 2010-01-15 21:15:50

这看起来内联会做得更好。

你可以这样做:

代码语言:javascript
运行
复制
var requestedObject = someObject as TheTypeYouWant;

当你像这样声明一些东西时,你不会得到一个空引用异常。然后你可以只做一个简单的

代码语言:javascript
运行
复制
if(requestedObject != null){
    ...
}
票数 5
EN

Stack Overflow用户

发布于 2010-01-15 21:17:47

使用泛型:

代码语言:javascript
运行
复制
T foobar<T>() where T : new()
{
    return new T();
}
void somefunc()
{
    Guid g = foobar<Guid>();
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2071681

复制
相关文章

相似问题

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