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

  • Android Central

    Android Cent

    13 Kasım 2008
  • Monica Catral

    Monica Catra

    12 NİSAN 2009
  • The Fashion Sight

    The Fashion

    22 AĞUSTOS 2011