如何初始化ReadOnlyDictionary?

时间:2017-05-30 12:43:36

标签: c# dictionary c#-6.0

我有一个在课堂上暴露的不变的字典。

目前我的代码看起来像

        public void sendd(View view)
{
    amount=(EditText)findViewById(R.id.amt);
    String message1=amount.getText().toString();
    Intent i=new Intent(this,MainActivity.class);
    i.putExtra(MESSAGE_KEY1,message1);
    startActivity(i);

}

我使用了支持字段using System.Collections.Generic; using System.Collections.ObjectModel; public class FooClass { private static ReadOnlyDictionary<string, byte> _validRevisions = new ReadOnlyDictionary<string, byte>( new Dictionary<string, byte>() { { "1.0", 0x00 }, { "1.1", 0x01 }, { "1.2", 0x02 }, { "1.3", 0x03 } } ); public static ReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions; // other FooClass contents... } ,因为我无法找到创建共享常量字典属性的更好方法。有没有更简洁的方法来管理这个或者我应该公开这个领域?

我的主要问题是初始化_validRevisions字段本身的方法较短?创建一个内联字典以将其传递到一个字典(恰好是只读)似乎有点......代码味道。是吗?还有更好的方法吗?

编辑:关于ROD的另一件事我刚才注意到,没有方法可以支持检查它是否包含给定的值...是否有与之相关的原因&#39;只读岬?

2 个答案:

答案 0 :(得分:13)

如果您不介意使用IReadOnlyDictionary代替ReadOnlyDictionary,则可以使用此功能,因为Dictionary实施了IReadOnlyDictionary

private static IReadOnlyDictionary<string, byte> _validRevisions
    = new Dictionary<string, byte>
       {
           { "1.0", 0x00 },
           { "1.1", 0x01 },
           { "1.2", 0x02 },
           { "1.3", 0x03 }
        };

public static IReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;

答案 1 :(得分:7)

ReadOnlyDictionary<TKey, TValue>只是普通字典的包装器,只有一个constructor来初始化它,需要另一个var message = "Hello your Student" + row[1] + '\n' + " Has done a marvelous job in Class" + row[2] + '\n' + " His new area to grow involves" + row[3]+ row [4]+ row [5] ; 实例。

所以没有,没有更短的方法。但是我使用static constructor来初始化复杂的静态对象:

Dictionary