0

拡張機能を使ってDoLoopを実装できるかどうか知りたい。

これが私の機能しないコードです:

  <System.Runtime.CompilerServices.Extension()> _
  Public Sub DoUntil(condition As Func(Of Boolean), action As Action)
    Do Until condition
      action()
    Loop
  End Sub

したがって、次のように呼び出すことができます。

   DoUntil(Function() Finished = True, Sub()
 x = x + 1
If IsPrime(x) Then
  Finished = True
)

しかし、エラーが発生します:タイプ'System.Func(Of Boolean)'の値を'ブール値'に変換できません

ありがとう。

4

3 に答える 3

1

条件を満たすレジスタの数を知る必要がある場合は、このようなものを使用できます(VB.Netの101個のLINQサンプルからこの例を取得しました) 。

Public Sub Linq74()
Dim numbers() = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}

Dim oddNumbers = numbers.Count(Function(n) n Mod 2 = 1)

Console.WriteLine("There are {0} odd numbers in the list.", oddNumbers)
End Sub
于 2012-07-24T16:30:42.360 に答える
1

あなたがすでにこれを持っていると仮定すると(C#、申し訳ありませんが、私はVBにあまり精通していません):

//Table name we're looking for
var LookingFor = "Foo";
//Tablenamess returned by some function (in this case some array)
var Foos = new[] { "Bar", "Foobar", "Foo_w00t", "Foo1", "foo7", "SomeFoo", "Foo_3", "Foo4", "F00", "Foo" };

カウントを取得するのは簡単です:

//Look for "XXX[0-9]+" where XXX is the (case insensitive for demonstration purposes) tablename
Regex r = new Regex(string.Format("^{0}[0-9]*$", Regex.Escape(LookingFor)), RegexOptions.IgnoreCase);
var count = Foos.Count(x => r.IsMatch(x));

4これは(Foo1、、、および)foo7を返します。Foo14Foo

于 2012-07-24T16:43:44.880 に答える
1
    var myCollection = new List<string> {"Jeremy 1", "Jeremy 2", "Christy 1", "Tyler 1", ""};
    //using a while loop
    var counter = 0;
    var index = 0;
    var testString = myCollection[index];
    while (myCollection[index] != "")
    {
        counter++;
        index++;
    }
    Console.WriteLine("The count was: " + counter);

    //using linq
    Console.WriteLine("The count was: " + myCollection.Count(i => i != ""));

実際、最初の例(それは悪いかもしれません)には欠陥があります。誤った状態に遭遇するとすぐにカウントを停止します。linq式は、空ではないすべての要素の数を出力します。

ここで、誤った状態に遭遇した瞬間にカウントを停止したい場合は、番兵の値について話していることになります。その場合、ループがおそらく最も簡単な解決策です。一般に、データベースで行うのと同じ方法でコレクションを操作している場合にのみ、linqを使用します。「クエリ」の結果に対して即時アクションを実行する場合にのみ、ラムダ式を使用してそれらを拡張します(imoという単語の不適切な使用)。

于 2012-07-24T17:11:37.107 に答える