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

  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • Hot For Nutrition

    Hot For Nutr

    26 ŞUBAT 2007
  • newport83

    newport83

    19 HAZİRAN 2006