我想在一個類中用 C# 創建一個匿名型別。
我所見過的用于var創建匿名變數的示例
var RecordId = new
{
Foo = 0,
Bar = "can be also a string"
};
但是我想在一個類中創建我的匿名變數。
public class Logger //: LogBase
{
var RecordId = new
{
Foo = 0,
Bar = 1
};
}
所以當記錄我可以做:
Logger.RecordId.Foo
但是將我的匿名型別宣告為 var 會觸發以下錯誤:
CS0825: The contextual keyword 'var' may only appear within a local variable declaration.
匿名變數的型別是什么,所以我不必使用 var?
我明白錯誤告訴我什么,但我不想在函式內移動我的變數,它需要是 Logger 的一個屬性。
編輯: enum 是我一開始嘗試的,但我需要這些值比整數更靈活(比如字串,所以我可以轉儲 jon 檔案)。我更新了我的問題以反映這一點。
uj5u.com熱心網友回復:
var(根據定義匿名型別)只能在方法內宣告,錯誤訊息基本上是在告訴你。如果你需要這個型別在類級別,那么創建一個類/結構/元組來存盤它。
public static class Record
{
public static int Foo { get; set; }
public static int Bar { get; set; }
}
public class Logger //: LogBase
{
public static Record RecordId { get; set; } = new Record();
}
現在你可以這樣做:
var foo = Logger.RecordId.Foo;
請注意,我也使用了static所以您不需要創建類的新實體,但如果您認為它相關,請更改它。
uj5u.com熱心網友回復:
public class Logger //: LogBase
{
public enum RecordId
{
Foo = 0,
Bar = 1
}
}
如果您不想要字串,則可以執行上述操作。
public class LogCategory
{
private LogCategory(string value) { Value = value; }
public string Value { get; private set; }
public static LogCategory Foo { get { return new LogCategory("Foo"); } }
public static LogCategory Bar { get { return new LogCategory("Bar"); } }
}
如果你想要字串,你可以創建自己的類,就像上面一樣。
uj5u.com熱心網友回復:
您可以使用該dynamic型別來擁有匿名實體變數。
public class Foo
{
dynamic bar = new {
A = 1,
B = 2
};
public void Print() {
Console.WriteLine(bar.A);
}
}
試試看!
僅僅因為您可以做到這一點并不意味著這是一個好主意。有關使用強型別物件的替代方法,請參閱DavidG的回答,該物件不需要您將代碼暴露于與該dynamic型別相關的許多問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/337216.html
下一篇:獲取引數自定義映射
