相关疑难解决方法(0)

检查类型是否为Nullable的正确方法

为了检查a Type(propertyType)是否可以为空,我正在使用:

bool isNullable =  "Nullable`1".Equals(propertyType.Name)
Run Code Online (Sandbox Code Playgroud)

有没有办法避免使用魔法字符串?

c# generics nullable

162
推荐指数
2
解决办法
6万
查看次数

如何将System.Type转换为可为空的版本?

其中一个:"是否有一种更简单的内置处理方式而不是我的帮助方法?"

所以从可空类型中获取底层类型很容易,但是如何获得.NET类型的可空版本呢?

所以我有

typeof(int)
typeof(DateTime)
System.Type t = something;
Run Code Online (Sandbox Code Playgroud)

而且我要

int? 
DateTime?
Run Code Online (Sandbox Code Playgroud)

要么

Nullable<int> (which is the same)
if (t is primitive) then Nullable<T> else just T
Run Code Online (Sandbox Code Playgroud)

有内置方法吗?

.net c#

72
推荐指数
3
解决办法
2万
查看次数

为什么GetType()为Nullable <DateTime>返回DateTime类型

可能重复:
Nullable类型不是可空类型?

在以下代码中:

DateTime? dt = DateTime.Now;
MessageBox.Show(dt.GetType().ToString());
Run Code Online (Sandbox Code Playgroud)

消息框显示"System.DateTime",而不是Nullable<DateTime>.以下内容也返回false(因为GetType错误):

if (dt.GetType().IsAssignableFrom(typeof(DateTime?))) 
 ...
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,使用DateTime?Nullable<DateTime>没有区别)在监视窗口中,您有"类型"列显示正确的类型(System.DateTime?).

在我的代码中,我引用了dt作为一个object,所以我需要正确地获取底层类型.我怎样才能做到这一点?

.net c# nullable .net-4.0 c#-4.0

15
推荐指数
1
解决办法
2万
查看次数

在C#中检测可空类型

我有一个定义如下的方法:

public bool IsValid(string propertyName, object propertyValue)
{
  bool isValid = true;
  // Validate property based on type here
  return isValid;
}
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

if (propertyValue is bool?)
{
  // Ensure that the property is true
}
Run Code Online (Sandbox Code Playgroud)

我的挑战是,我不知道如何检测我的propertyValue是否是可以为空的bool.谁能告诉我怎么做?

谢谢!

c# nullable

7
推荐指数
1
解决办法
384
查看次数

测试Type是否为Nullable的不同方法?

这是我用来检测我们是否正在处理Nullable类型的条件:

System.Nullable.GetUnderlyingType(itemType) != null
Run Code Online (Sandbox Code Playgroud)

这里是我队友的代码:

itemType.IsGenericType && itemType.GetGenericTypeDefinition() == typeof(Nullable<>)
Run Code Online (Sandbox Code Playgroud)

我们实际上并没有找到一个案例,其中一个将返回true而另一个false(或反之亦然),但这两个片段是否完全相同?

c# nullable

7
推荐指数
1
解决办法
1653
查看次数

VB.NET编译器如何选择运行哪个扩展重载?

有一个有趣的奇怪 - 认为有人可能会帮助.

这可以从这个问题的可空类型中获得一些乐趣:

如何检查对象是否可以为空?

Option Strict On

Module Test
  ' Call this overload 1
  <Extension()>
  Function IsNullable(obj As ValueType) As Boolean
    Return False
  End Function

  ' Call this overload 2
  <Extension()>
  Function IsNullable(Of T As {Structure})(obj As Nullable(Of T)) As Boolean
    Return True
  End Function

  Sub Test() 
    ' a is an integer!
    Dim a As Integer = 123

    ' calling IsNullable as an extension method calls overload 1 and returns false
    Dim result1 As Boolean = a.IsNullable()

    ' calling …
Run Code Online (Sandbox Code Playgroud)

.net vb.net extension-methods overloading

7
推荐指数
1
解决办法
546
查看次数

如何将值从对象转换为Nullable &lt;&gt;

我有一些带有某些属性的类,我想将值从字符串转换为此属性的类型。而且我有转换为可为空类型的问题。这是我的转换方法:

public static object ChangeType(object value, Type type)
{
    if (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
    {
        if (value == null)
        {
            return null;
        }

        var underlyingType = Nullable.GetUnderlyingType(type);
        var val = Convert.ChangeType(value, underlyingType);
        var nullableVal = Convert.ChangeType(val, type); // <-- Exception here
        return nullableVal;
    }

    return Convert.ChangeType(value, type);
}
Run Code Online (Sandbox Code Playgroud)

我收到这样的异常(对于int类型的属性?):

从'System.Int32'到'System.Nullable`1 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]的无效转换。

如何从类型转换为可为空的类型?谢谢。

c#

6
推荐指数
2
解决办法
7276
查看次数

如何确定非null对象是否为Nullable结构?

反正知道这个吗?

我找到一篇帖子,询问一个非常类似的问题, 如何检查一个对象是否可以为空? 答案解释了如果可以访问通用类型参数,如何确定对象是否可为空.这是通过使用来完成的Nullabe.GetUnderlyingType(typeof(T)).但是,如果您只有一个对象并且它不为null,您能否确定它是否实际上是Nullable ValueType?

换句话说,有没有比单独检查每个可能的可空值类型更好的方法来确定盒装结构是否是值类型?

void Main(){
    Console.WriteLine(Code.IsNullableStruct(Code.BoxedNullable));
} 


public static class Code{
    private static readonly int? _nullableInteger = 43;

    public static bool IsNullableStruct(object obj){
                  if(obj == null) throw new ArgumentNullException("obj");
                  if(!obj.GetType().IsValueType) return false;
                  return IsNullablePrimitive(obj);
            }
    public static bool IsNullablePrimitive(object obj){
         return obj is byte? || obj is sbyte? || obj is short? || obj is ushort? || obj is int? || obj is uint? || obj is long? || obj is ulong? || …
Run Code Online (Sandbox Code Playgroud)

c# reflection nullable value-type c#-4.0

5
推荐指数
1
解决办法
536
查看次数

在Nullable <int>上键入检查

如果有以下方法:

static void DoSomethingWithTwoNullables(Nullable<int> a, Nullable<int> b)
{
    Console.WriteLine("Param a is Nullable<int>: " + (a is Nullable<int>));
    Console.WriteLine("Param a is int          : " + (a is int));
    Console.WriteLine("Param b is Nullable<int>: " + (b is Nullable<int>));
    Console.WriteLine("Param b is int          : " + (b is int));
}
Run Code Online (Sandbox Code Playgroud)

当我使用null作为参数调用此方法时,类型检查将为此参数返回false.例如这段代码

DoSomethingWithTwoNullables(5, new Nullable<int>());
Run Code Online (Sandbox Code Playgroud)

结果输出:

Param a is Nullable<int>: True
Param a is int          : True
Param b is Nullable<int>: False
Param b is int          : False
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用Nullable并传递null时保留类型信息?我知道在这个例子中检查类型是没用的,但它说明了问题.在我的项目中,我将参数传递给另一个接受params object[]数组的方法,并尝试识别对象的类型.这个方法需要为Nullable<int>和做不同的事情 …

c#

5
推荐指数
1
解决办法
190
查看次数

可以分配null吗?

可能重复:
如何检查对象是否可以为空?
确定是否可以将反射属性指定为null

如何正确识别给定类型的变量(或类成员)是否可以采用null?更具体地说,如何处理,Nullable<T>因为它不是参考类型?或者可能在其上定义一些怪异隐式转换的任何其他类型.我的直觉是找到答案的唯一可靠方法是try{} catch{}看它是否爆炸......但也许有一些技巧.

.net c# reflection .net-2.0

4
推荐指数
1
解决办法
1572
查看次数

.NET:如何判断类型是否可为空?

可能重复:
如何检查对象是否可以为空?

我有一个System.Type对象,可能是一个Nullable<T>.我如何在运行时确定?

注意:此时我不关心T是什么,我只需要知道它是否是Nullable.

.net

3
推荐指数
1
解决办法
3548
查看次数

如何在c#中以编程方式确定某个类型是否接受空值?

我知道仅仅检查类型是否不是值类型是不够的.我如何解释那些Nullable?

重复

如何检查对象是否可以为空?

.net c# nullable

2
推荐指数
1
解决办法
577
查看次数