0

実際には、それがどのように正しく呼び出されるかを正確に言うことさえできませんが、1 つのメソッドで変数/プロパティ/フィールドを割り当てることができるものが必要です。私は説明しようとします...私は次のコードを持っています:

txtBox.Text = SectionKeyName1; //this is string property of control or of any other type
if (!string.IsNullOrEmpty(SectionKeyName1))
{
    string translation = Translator.Translate(SectionKeyName1);
    if (!string.IsNullOrEmpty(translation))
    {
        txtBox.Text = translation;
    }
}

stringField = SectionKeyName2; //this is class scope string field
if (!string.IsNullOrEmpty(SectionKeyName2))
{
    string translation = Translator.Translate(SectionKeyName2);
    if (!string.IsNullOrEmpty(translation))
    {
        stringField = translation;
    }
}

stringVariable = SectionKeyName3; //this is method scope string variable
if (!string.IsNullOrEmpty(SectionKeyName3))
{
    string translation = Translator.Translate(SectionKeyName3);
    if (!string.IsNullOrEmpty(translation))
    {
        stringVariable = translation;
    }
}

ご覧のとおり、このコードは、設定する「オブジェクト」と SectionKeyName を受け取る 1 つのメソッドにリファクタリングできます。したがって、次のようになります。

public void Translate(ref target, string SectionKeyName)
{
    target = SectionKeyName;
    if (!string.IsNullOrEmpty(SectionKeyName))
    {
        string translation = Translator.Translate(SectionKeyName);
        if (!string.IsNullOrEmpty(translation))
        {
            target = translation;
        }
    }
}

BUT:プロパティをrefで渡すことができないため、texBox.Textを割り当てたい場合にそのメソッドを使用できません.... プロパティの解決策であるSOのトピックを見つけましたが、プロパティを解決して立ち往生しましたフィールド/変数で....

私のすべてのケースを処理する単一のメソッドを作成する方法を見つけるのを手伝ってください...

//This method will work to by varFieldProp = Translate(SectionKeyName, SectionKeyName), but would like to see how to do it with Lambda Expressions.
public string Translate(string SectionKeyName, string DefaultValue)
{
    string res = DefaultValue; //this is string property of control or of any other type
    if (!string.IsNullOrEmpty(SectionKeyName))
    {
        string translation = Translator.Translate(SectionKeyName);
        if (!string.IsNullOrEmpty(translation))
        {
            res = translation;
        }
    }

    return res;
}

ありがとうございました !!!

4

1 に答える 1

3

私はあなたがこのようなものが欲しいと思います:

public void Translate(Action<string> assignToTarget, string SectionKeyName)
        {
            assignToTarget(SectionKeyName);
            if (!string.IsNullOrEmpty(SectionKeyName))
            {
                string translation = Translator.Translate(SectionKeyName);
                if (!string.IsNullOrEmpty(translation))
                {
                    assignToTarget(translation);
                }
            }
        }

ただし、単にラムダを削除して、関数が必要に応じて使用する翻訳された文字列を返すようにした方がよいでしょう。完全を期すために、この関数を呼び出すには、次を使用できます。

Translate(k=>textBox1.Text=k,sectionKeyName);
于 2012-07-05T12:33:47.643 に答える