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ş:
'başvuruyla geçirme arasındaki fa...
Java: satır için olası özellikleri bir...
Büyü gizli özellikleri...
Hiç kendini dil özellikleri bir alt kü...
Harika gizli özellikleri?...