通过对象的名称作为字符串 c# 访问对象
Posted
技术标签:
【中文标题】通过对象的名称作为字符串 c# 访问对象【英文标题】:Access an object through its name as a string c# 【发布时间】:2022-01-15 12:39:05 【问题描述】:我试图找出如何通过与对象名称同名的字符串来访问对象。 比如我想用for循环改变n次Button的属性
public static object GetObject(string ObjectName)
// this Method has to return an Object through his name
for (int i = 1; i < 4; i++)
GetObject(Convert.ToString("Button" +i) ).Text = Convert.ToString(i);
此代码与此代码功能相同
Button1.Text = "1";
Button2.Text = "2";
Button3.Text = "3";
【问题讨论】:
我建议将您的按钮放在Dictionary<string,Button>
中,然后您可以为您的按钮指定唯一名称并通过ButtonDict[name].Text = "1"
访问它们
你的用例是什么?请提供更多背景信息。
【参考方案1】:
您可以使用C#
开发不同类型的应用程序。即Web
、WinForms
、WPF
。它们有不同类型的Control
和Type
。我假设您正在开发一个WinForms
应用程序。在这种情况下,您可以使用WinForm
的Controls
属性来访问Form
的所有Controls
。
请检查以下代码块的实现:
public object GetObject(string ObjectName)
// this Method has to return an Object through his name
Control myControl = Controls.Find(ObjectName, true).FirstOrDefault();
if (myControl != null)
// Do Stuff
return myControl;
else return null;
private void RenameButtons()
for (int i = 1; i < 4; i++)
//GetObject(Convert.ToString("Button" + i)).Text = Convert.ToString(i);
object btn = GetObject(Convert.ToString("Button" + i));
if (btn != null) ((Button)btn).Text = Convert.ToString(i);
您将通过关注this link 找到有关 Controls 属性的更多详细信息。
【讨论】:
【参考方案2】:你可以试试这个
foreach (Control control in Controls)
var btn = control as Button;
if ( btn != null && btn.Name.StartsWith("Button") )
var i= btn.Name.Substring(6, 1)
//if( i.Convert.ToInt32() <4 ) //optional
btn.Text = i;
【讨论】:
if (btn?.StartsWith("Button") ?? false) ...
.以上是关于通过对象的名称作为字符串 c# 访问对象的主要内容,如果未能解决你的问题,请参考以下文章
通过elasticsearch.net中的字符串数组查询字符串数组
不使用eval,按字符串名称访问命名空间的javascript对象