SORU
10 EYLÜL 2009, PERŞEMBE


C başvuruyla geçirme özellikleri#

Aşağıdakileri yapmaya çalışıyorum:

GetString(
    inputString,
    ref Client.WorkPhone)

private void GetString(string inValue, ref string outValue)
{
    if (!string.IsNullOrEmpty(inValue))
    {
        outValue = inValue;
    }
}

Bu bana bir derleme hatası veriyor. Ulaşmak istediğim gayet açık bence. Temelde GetString Client WorkPhone özelliği için bir giriş dizesi içeriğini kopyalamak istiyorum.

Başvuruyla bir özellik geçmek mümkün mü?

CEVAP
10 EYLÜL 2009, PERŞEMBE


Özellikleri referans olarak geçirilemez. İşte bu kısıtlamaya bir geçici çözüm bulmak için kullanabileceğiniz birkaç yol.

1. Değeri Döndürür

string GetString(string input, string output)
{
    if (!string.IsNullOrEmpty(input))
    {
        return input;
    }
    return output;
}

void Main()
{
    var person = new Person();
    person.Name = GetString("test", person.Name);
    Debug.Assert(person.Name == "test");
}

2. Delegeler

void GetString(string input, Func<string> getOutput, Action<string> setOutput)
{
    if (!string.IsNullOrEmpty(input))
    {
        setOutput(input);
    }
}

void Main()
{
    var person = new Person();
    GetString("test", () => person.Name, value => person.Name = value);
    Debug.Assert(person.Name == "test");
}

3. Seri İfadeler

void GetString<T>(string input, T outObj, Expression<Func<T, string>> outExpr)
{
    if (!string.IsNullOrEmpty(input))
    {
        var expr = (MemberExpression) outExpr.Body;
        var prop = (PropertyInfo) expr.Member;
        prop.SetValue(outObj, input, null);
    }
}

void Main()
{
    var person = new Person();
    GetString("test", person, x => x.Name);
    Debug.Assert(person.Name == "test");
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Washington

    Adam Washing

    12 Mayıs 2006
  • TouchePro

    TouchePro

    27 EYLÜL 2007
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011