namespace ConsoleApplication15
{
using System;
using Castle.DynamicProxy;
public class Test
{
private SubTestClass subTestClass;
public string Status
{
get
{
return this.subTestClass.SubStatus;
}
set
{
this.subTestClass.SubStatus = value;
}
}
public int Data { get; set; }
}
public class SubTestClass
{
public string SubStatus { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
var proxyGenerator = new ProxyGenerator();
var testObject = proxyGenerator.CreateClassProxy<Test>();
if (testObject.Status != null)
{
Console.WriteLine("Working");
}
}
}
}
У меня есть следующий код, и я хочу установить значение по умолчанию Status
на строку Empty
. Когда я запускаю следующий код, строка состояния всегда Null
и выдает нулевое исключение !!
testObject.Status
возвращает пустую строку и не вызывает исключения.
2 ответа
Я нашел решение проблемы с IInterceptor. Я могу создать свой собственный результат. Спасибо за помощь!
namespace ConsoleApplication15
{
using System;
using Castle.DynamicProxy;
public class Test
{
private SubTestClass subTestClass;
public virtual string Status
{
get
{
return this.subTestClass.SubStatus;
}
set
{
this.subTestClass.SubStatus = value;
}
}
public int Data { get; set; }
}
public class SubTestClass
{
public string SubStatus { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
var proxyGenerator = new ProxyGenerator();
var testObject = proxyGenerator.CreateClassProxy<Test>(new MyInter());
if (testObject.Status != null)
{
Console.WriteLine("Working");
}
}
}
public class MyInter : IInterceptor
{
public void Intercept(IInvocation invocation)
{
if (invocation.Method.ReturnType == typeof(string))
{
invocation.ReturnValue = string.Empty;
}
}
}
}
Чтобы присвоить автоматически реализованным свойствам значение по умолчанию, вам нужно будет сделать это в конструкторе или что-то вроде этого:
[TestFixture]
public class UnitTest1
{
[Test]
public void TestMethod1()
{
var proxyGenerator = new ProxyGenerator();
var testObject = proxyGenerator.CreateClassProxy<Test>();
Console.WriteLine(
testObject.Status != null
? "Working"
: "no....");
}
}
public class Test
{
private SubTestClass subTestClass = new SubTestClass();
public string Status
{
get
{
return this.subTestClass.SubStatus;
}
set
{
this.subTestClass.SubStatus = value;
}
}
public int Data { get; set; }
}
public class SubTestClass
{
public SubTestClass()
{
SubStatus = "";
}
public string SubStatus { get; set; }
}
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.