我有两个班级A
和B
。类A
具有类B
的实例。类A
有一个类Foo
列表,其中属性Id
和Name
是动态的。在调用类Run
的{{1}}方法时,会计算类B
中的局部变量id
。假设B
的值为2,我需要搜索id
并返回“两个”。
事件可以更新
dynamicList
。
dynamicList
我有两个班级
class Foo() { public Foo(int id, string name) { this.Id = id; this.Name = name; } public int Id { get; set; } public string Name { get; set; } } class A { public A() { this.dynamicList.Add(new Foo(1, "One")); this.dynamicList.Add(new Foo(2, "Two")); this.dynamicList.Add(new Foo(3, "Three")); b = B(); b.Run(); } public List<Foo> dynamicList = new List<Foo>(); } class B { public void Run() { while(true) { int id; string name; // an event appended this.dynamicList.Add(new Foo(4, "Four")); // an event appended this.dynamicList.Add(new Foo(5, "Five")); // some code goes here that gets the value of id 4 id = 4; // I need to convert the value of '4' to 'Four' } } }
和A
。类B
具有类的实例A
。类B
有一个类A
的列表,其中包含属性Foo
和Id
这是动态的。当调用类Name
的{{1}}方法时, 计算类Run
中的局部变量B
。假设价值id
为{2},我需要搜索B
并返回“两个”。id
答案 0 :(得分:0)
您可以使用值创建辅助类并从中获取值。
public static class ValueHelper
{
public static string GetValue(int i)
{
...
}
}
在B
:
strint value = ValueHelper.GetValue(2);
答案 1 :(得分:0)
有多种方法可以实现这一点。
1是通过参数。
b.Run(dynamicList);
然后在方法运行上运行搜索。
public void Run()
{
while(true)
{
int id;
string name;
// some code goes here that gets the value of id 2
id = 2;
var item = dynamicList.FirstOrDefault(x => x.Id == id);
// reference System.Linq
}
}
第二个是提供参数的委托。
b.Run(id => dynamicList.FirstOrDefault(x => x.Id == id))
在运行
上制作这样的代码public void Run(Func<int, Foo> getItem)
{
while(true)
{
int id;
string name;
// some code goes here that gets the value of id 2
id = 2;
var item = getItem(id);
// reference System.Linq
}
}
还有很多其他方法可以做到这一点,这些只是如何通过对代码进行最少修改来完成的示例,您还可以考虑进行设计更改以进一步改进流程。
答案 2 :(得分:0)
只需将B.Run的签名更改为:
public void Run(A a)
然后您可以使用方法调用轻松传递列表:
b.Run(this)
可以使用
访问该列表a.dynamicList
答案 3 :(得分:0)
您必须将 dynamicList 的参数设为B类
public class Foo()
{
public Foo(int id, string name)
{
this.Id = id;
this.Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
}
public class A
{
B b = null;
public A()
{
this.dynamicList.Add(new Foo(1, "One"));
this.dynamicList.Add(new Foo(2, "Two"));
this.dynamicList.Add(new Foo(3, "Three"));
b =new B();
b.Run(dynamicList);
}
public List<Foo> dynamicList = new List<Foo>();
}
public class B
{
public void Run(List<Foo> DynamicList)
{
Foo foo = null;
while(true)
{
foo = DynamicList[0];
int id = foo.Id;
string name = foo.Name;
//here you can add your logic..
// it may be foreach loop or something else..
//and iterate all List in DynamicList
// some code goes here that gets the value of id 2
id = 2;
// I need to convert the value of '2' to 'Two'
}
}
}
答案 4 :(得分:0)
Add the parameter List<Foo> dynamicList in Run method and pass the List from the caller class constructor A().
class Foo()
{
public Foo(int id, string name)
{
this.Id = id;
this.Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
}
class A
{
public A()
{
this.dynamicList.Add(new Foo(1, "One"));
this.dynamicList.Add(new Foo(2, "Two"));
this.dynamicList.Add(new Foo(3, "Three"));
b = B();
b.Run(dynamicList);
}
public List<Foo> dynamicList = new List<Foo>();
}
class B
{
public void Run(List<Foo> dynamicList)
{
while(true)
{
int id;
string name;
var data= dynamicList.FirstOrDefault(x=>x.Id==2);
id=data.Id;
//id = 2;
var two= dynamicList.FirstOrDefault(x=>x.Id==2).Select(x=>x.Name);
// I need to convert the value of '2' to 'Two'
}
}
}
希望这是你所期待的。