use*_*754 2 c# asp.net types nullable
public class MyType
{
public int? MyId { get; set; }
}
MyType myType = new MyType();
myType.MyId.GetType()
Run Code Online (Sandbox Code Playgroud)
由于MyId未设置,最后一行返回一个异常(即,它为null)。在这种情况下,如何获取类型(int?或什至int)?注意,int?用作示例,变量可以具有任何类型,这只是一个简化的示例。
请注意,根据微软的说法,这应该可行:
int? a = 17;
Type typeOfA = a.GetType();
Console.WriteLine(typeOfA.FullName);
// Output:
// System.Int32
Run Code Online (Sandbox Code Playgroud)
它确实在分配值时起作用...
编辑。
查看一些答复和评论,我想在代码中添加这些内容,我将myType.MyId作为对象传递给需要弄清楚其类型的方法。基本上,它类似于:
public void RunQuery(string sql, List<(string parameterName, object parameterValue)> parameters)
Run Code Online (Sandbox Code Playgroud)
所以myType.MyId作为parameterValue传递到RunQuery
您可以使用反射来获取属性的声明类型(在编译时已知):
Type t = typeof(MyType).GetProperty(nameof(MyType.MyId)).PropertyType;
Run Code Online (Sandbox Code Playgroud)
而GetType()用于找出实际的类型在运行时的对象,但这并不针对意义null的参考。
编辑:
当你施放Nullable<T>一个Object,它的价值是盒装,所以,如果是null,你会得到只是一个Object可变null的参考,你将无法找出任何类型更多。
因此,您应该以某种方式更改基础结构,以使类型随参数传递。最快的解决方法是显式地传递它
List<(string parameterName, object parameterValue, Type parameterType)> parameters
Run Code Online (Sandbox Code Playgroud)
请检查System.Data.SqlClient.SqlParameter,我不确定,但这可能正是您需要使用的。