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

  • PamtheBlamofficial

    PamtheBlamof

    31 Aralık 2010
  • SolidWorksTutoriels

    SolidWorksTu

    14 Kasım 2013
  • Tom Megalis

    Tom Megalis

    18 NİSAN 2006