Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何:值类型字段的引用数组_C# - Fatal编程技术网

C# 如何:值类型字段的引用数组

C# 如何:值类型字段的引用数组,c#,C#,这是一个非常做作的例子。不要专注于看似糟糕的设计、琐碎的实现或逻辑上的漏洞 假设我有一个这样的班 class MyClass : SomeToolkitClass { public bool Enabled00; public bool Enabled01; public bool Enabled02; public int Value00; public int Value01; public int Value02; public

这是一个非常做作的例子。不要专注于看似糟糕的设计、琐碎的实现或逻辑上的漏洞

假设我有一个这样的班

class MyClass : SomeToolkitClass
{
    public bool Enabled00;
    public bool Enabled01;
    public bool Enabled02;

    public int Value00;
    public int Value01;
    public int Value02;

    public String Desc00;
    public String Desc01;
    public String Desc02;

    public void SendDetails( )
    {
        SendDetails( Enabled00, Value00, Desc00 );
        SendDetails( Enabled01, Value01, Desc01 );
        SendDetails( Enabled02, Value02, Desc02 );
    }

    public void SendDetails( bool enabled, int value, string desc )
    {
        if( enabled )
        {
            // do some magic stuff here
        }
    }
}
// ...
if( Enabled[i] && Values[i] == value )
    OtherField[i] = newValue;
// ...
此代码“形状”基于使用第三方工具包,其中面向公众的值必须是简单字段。真正的逻辑要复杂得多,但遵循类似的模式。我有32个字段(不是3个)和大约7个变量组(不是3个)

我真正想做的是这样的事情(我正在使用一些虚构的语法和一点简短的文字来演示)

有什么建议吗?我对不需要像原始SendDetails()方法那样的代码的替代方法持开放态度

记住

不要关注我的具体(琐碎)例子,关注问题

拥有单独的字段是第三方工具包的一项要求——我不能改变这一点


关于引用列表的整个想法来自于知道原始数据值可以在我的控制之外更改。这意味着缓冲当前数据值可能不实际。

我不理解你所说的“缓冲当前数据值”是什么意思。通过使用局部变量,您已经在“缓冲”它们了!我会将所有这些值包装到一个对象中,并保存一个对象列表。这是一个可接受的解决方案吗?不可能,因为您正在传递基元值类型。即使存在
列表
,一旦您将一个元素传递到一个不使用
ref
参数的方法中,游戏就结束了。您不能使用ValueType吗?
// ...
if( Enabled[i] && Values[i] == value )
    OtherField[i] = newValue;
// ...