gpt4 book ai didi

c# - 在扩展方法中实例化空对象

转载 作者:太空宇宙 更新时间:2023-11-03 17:27:52 25 4
gpt4 key购买 nike

我想知道是否可以在该对象的扩展方法中实例化一个空对象。

例子:

简单类

public class TestClass
{
public string Name { get; set; }
public int Age { get; set; }
}

扩展方法

public static class ExtensionMethods
{
public static void GetTestClass(this TestClass tc, string name)
{
using (SqlConnection cn = new SqlConnection(myConnectionString))
using (SqlCommand cmd = cn.CreateCommand())
{
cmd.CommandText= "SELECT Name, Age FROM Person WHERE Name = @Name";
cn.Open();

cmd.Parameters.AddWithValue("@Name", name);

using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
tc = new TestClass();
tc.Name = name;
tc.Age = int.Parse(dr["Age"]);
}
}
}
}
}

用户要给我一个名字,我想通过这样做来验证这个名字是否存在......

static void Main(string[] args)
{
TestClass tc = null;
tc.GetTestClass("Some Name");

if (tc == null)
{
Console.WriteLine("Not Found");
}

Console.Read();
}

这可能吗?我当前的代码将原始对​​象保留为 null。我不知道我是否做错了什么,这是不可能的。

谢谢。

最佳答案

这行不通,您需要一个返回对象的方法。在扩展方法中分配 this 参数不会执行您希望它执行的操作,它不会修改 tc变量。

您可能会成为此处 IntelliSense 陷阱的牺牲品,是的,它将向您展示 GetTestClass() 方法。但是您必须编写的代码无法通过右侧的代码审查门:

  tc = tc.GetTestClass("some name");

很明显你想要一个静态工厂方法:

  tc = Mumble.CreateTest("some name");

关于c# - 在扩展方法中实例化空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com