[英]Equivalent in C# of “Block values” in other languages
在某些語言中,幾乎所有東西都可以用作價值。 例如,某些語言允許您將代碼塊視為可以返回值的單元。
在Scheme中,包含在let
的代碼塊可以返回一個值:
(define val
(let ()
(define a 10)
(define b 20)
(define c (+ a b))
c))
Perl 5還支持塊作為值:
my $val = do
{
my $a = 100;
my $b = 200;
my $c = $a + $b;
$c;
};
我在C#中可以提出的塊值的最接近的近似值是使用一個被轉換的lambda並立即調用:
var val = ((Func<int>)(() =>
{
var a = 10;
var b = 20;
var c = a + b;
return c;
}))();
這不是太糟糕,實際上正是在語義上與Scheme發生的事情; let
被轉換為應用的lambda
。 在這一點上,我不介意用C#中的宏來清理語法雜亂。
是否有另一種方法可以在C#中獲得“塊值”?
對不起,起初我似乎誤解了你的問題,但似乎代表 (如你的問題)正是你正在尋找的沒有? 如果您有興趣快速將一組不同的值組合在一起,而不一定是邏輯,我之前的答案仍然適用。
C#支持匿名類型 。
var v = new { Amount = 108, Message = "Hello" };
引入了var
關鍵字,因此您不必指定類型名稱。
之后您可以按如下方式訪問成員:
Console.WriteLine( v.Amount );
自C#4.0以來的另一個解決方案是使用Tuples ,它基本上將一組未命名的值組合在一起。
var population = Tuple.Create(
"New York", 7891957, 7781984,
7894862, 7071639, 7322564, 8008278 );
你必須使用population.Item1
, population.Item2
,...來訪問它們
在某些語言中,幾乎所有東西都可以用作價值。
舉一個例子,Scheme。 Scheme是一種函數式語言,(幾乎)Scheme中的所有東西都是函數而不是值。
通過包含Linq,C#現在已成為部分功能語言。
所以你尋找的等價物是Linq查詢和lambda函數。 如果這還不夠,請看一下F#。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.