相关疑难解决方法(0)

C#中泛型参数的空或默认比较

我有一个像这样定义的泛型方法:

public void MyMethod<T>(T myArgument)
Run Code Online (Sandbox Code Playgroud)

我想要做的第一件事是检查myArgument的值是否是该类型的默认值,如下所示:

if (myArgument == default(T))
Run Code Online (Sandbox Code Playgroud)

但是这不能编译,因为我没有保证T将实现==运算符.所以我把代码改为:

if (myArgument.Equals(default(T)))
Run Code Online (Sandbox Code Playgroud)

现在这个编译,但是如果myArgument为null则会失败,这是我正在测试的一部分.我可以像这样添加一个显式的空检查:

if (myArgument == null || myArgument.Equals(default(T)))
Run Code Online (Sandbox Code Playgroud)

现在这让我感到多余.ReSharper甚至建议我将myArgument == null部分更改为myArgument == default(T),这是我开始的地方.有没有更好的方法来解决这个问题?

我需要支持两种引用类型和值类型.

c# generics

269
推荐指数
7
解决办法
7万
查看次数

是否有 if(struct == null) 的可行替代方案?

我正在尝试检查是否已分配数组中的结构,但无法检查它或者它的数据为空。有什么方法可以检查它是否已分配吗?

结构:

    [StructLayout(LayoutKind.Explicit)]
    public struct CharInfo
    {
        [FieldOffset(0)]
        public CharUnion Char;
        [FieldOffset(2)]
        public short Attributes;
    }
Run Code Online (Sandbox Code Playgroud)

方法

    public void render(){
        for (int i = 0; i < (width * height - 1); i++) {
            if (screenBuffer[i].Char.UnicodeChar != Convert.ToChar(" ")) {
                ScreenDriver.screenBuffer[i] = screenBuffer[i];
            }
        }
       // ScreenDriver.screenBuffer = screenBuffer;
    }
Run Code Online (Sandbox Code Playgroud)

c# struct

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

如何忽略“使用可能未分配的字段‘字段’”?

我有以下最小示例代码:

struct MyStruct 
{
    long Size;
}

MyStruct myStruct;
bool result;

if (someCondition)
{
    result = API.SomeThirdPartyCall(out myStruct); // the call will set 'result' to 'true' and assign a value to 'myStruct'
}
if (result)
{
    result = API.AnotherCall(myStruct); //  <-- gives error "Use of possibly unassigned field 'myStruct' (CS0170)"
}
Run Code Online (Sandbox Code Playgroud)

我知道myStruct当我尝试使用该结构进行第二次 API 调用时,它已被分配了一个值。该API是由第三方提供的,我无法更改它。有什么方法可以忽略我的字段可能未定义的错误吗?

我知道有一些类似的问题,例如How to check if a struct has been instanciated,但解决方案是使用可为空的结构,这对我来说不是一个选择,因为 API 不会接受可为空的结构。

c# struct

0
推荐指数
1
解决办法
70
查看次数

标签 统计

c# ×3

struct ×2

generics ×1