C#是否可以将类型传递给方法并让方法返回该类型的对象?
这似乎是可能的。
protected SameObjectTypeAsInputParameterObjectType GetAValue(someObject,TypeOrReturnObjectYouWant){ //check to see if someObject is null, if not, cast it and send the cast back }
在您给出的示例中,您可能更好地执行以下操作:
MyClass val = myObject as MyClass;
但是要回答你的问题 – 是的,答案是使用generics:
protected T GetAValue(object someObject) { if (someObject is T) { return (T)someObject; } else { // We cannot return null as T may not be nullable // see https://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是什么 – 例如:
MyClass val = GetAValue(myObject); string strVal = GetAValue(someObject);
有关更多信息,请查看有关generics的MSDN文档
这似乎会更好地内联。
你能做的是:
var requestedObject = someObject as TheTypeYouWant;
当您声明类似的内容时,您将不会获得空引用exception。 然后你可以做一个简单的事情
if(requestedObject != null){ ... }
使用generics:
T foobar() where T : new() { return new T(); } void somefunc() { Guid g = foobar(); }
您可以像这样定义方法:
protected TReturnType GetAValue(Object someObject) where TReturnType : class { if(someObject is TReturnType) return (TReturnType) someObject; return null; }
或者,如果您不能保证TReturnType是引用类型,您可以省略generics约束(TReturnType:class)并返回默认值(TReturnType)而不是null – 这将返回默认类型TReturnType,对于int,它将为0 …
如果您在编译时知道类型(编写代码时),则可以使用generics。
如果您只在运行时知道类型(通过Type),则可以使用Activator类。
这种转换可以使用as
来完成
requestedObject as RequestedType
在方法中包装此表达式并不能真正购买任何东西
我想你可能真的在寻找Convert.ChangeType机制。
上述就是C#学习教程:C#是否可以将类型传递给方法并让方法返回该类型的对象?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
private static object ChangeTypeTo(this object value) { if (value == null) return null; Type underlyingType = typeof (T); if (underlyingType == null) throw new ArgumentNullException("value"); if (underlyingType.IsGenericType && underlyingType.GetGenericTypeDefinition().Equals(typeof (Nullable<>))) { var converter = new NullableConverter(underlyingType); underlyingType = converter.UnderlyingType; } // Guid convert if (underlyingType == typeof (Guid)) { return new Guid(value.ToString()); } // Check for straight conversion or value.ToString conversion var objType = value.GetType(); // If this is false, lets hope value.ToString can convert otherwise exception bool objTypeAssignable2typeT = underlyingType.IsAssignableFrom(objType); // Do conversion return objTypeAssignable2typeT ? Convert.ChangeType(value, underlyingType) : Convert.ChangeType(value.ToString(), underlyingType); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1023042.html