求助 C# 中如何在变量名中含有某个变量的值,在线等......

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助 C# 中如何在变量名中含有某个变量的值,在线等......相关的知识,希望对你有一定的参考价值。

如:for(int i=0;i<N;i++)

int asd¥i¥=i;

结果:
asd0=0;
asd1=1;
asd2=3;
asd4=4;

循环中使用类。
由于N的大小未知,所以想用这种方式

看了追问和回复好像你是要批量的去编辑控件么- -
如果我理解的没错的话。。。

这实际上取决于你具体要操作的对象。是类还是结构体
是类的字段变量 还是函数内定义的局部变量

对于局部变量来说 最好在定义的时候就用集合类进行定义
比如数组Array T[] 列表List<T> 或者字典Dictionary<Tkey,Tvalue>
这样你可以使用索引来达到你的语法目的 这对操作类和操作结构体是通用的

对于字段变量操作(当你深入的熟悉C#语法后 会发现你的控件实际上都是Form子类内自己定义的字段变量 它们的name和变量名通常是一致的 而已...)
也可以类似上面 先定义一个集合 把它们的引用都复制进去 再进行操作
更通用但是效率更低的办法是使用反射 (Reflect) 这是对字段进行操作的终极方法..只是效率低下(小规模使用可以忍受..)而且不容易掌握

你应该写一段真实的代码 让大家看清上下文 然后帮你写一个替代的解决方案。追问

for(int i=0;i<N;i++)
L
ListViewGroup asd¥i¥=new ListViewGroup() ;
//对ListViewGroup对象进行操作

N的值不确定,asd¥i¥ 意思是包含变量的变量名

追答

如果是局部变量 完全符合我第一种情况 也就是是用数组了啊=A=
ListViewGroup[] asd = new ListViewGroup[N];
for(int i=0;i<N;i++)
asd[i] = new ListViewGroup();
asd[i].xxxxx

参考技术A 完全没有必要这么做,可以用另外一个方式去实现。

你的意思是:

string s, k;
s="k";

因为,变量名要用都是要先申请。

动态数组就可以解决你的问题了。
直接如下定义(以INT类型为例)
int[] numbers;

如果是多维的话,可以这样定义:
int[,] numbers;
int[2,] numbers;追问

我的问题补充完整了,请你在看看,能不能解决

如果要循环使用的是类名呢?
还要这样吗?

参考技术B list<int> ss=new list<int>();
for(int i=0;i<N;i++)

ss.add(i);


ss[0]=0;
ss[1]=1;
ss[2]=2;追问

list 是什么?
你有没有试过?

追答

集合的一种,相当于建立一个INT类型的集合,然后向集合中添加集合的元素。可以用集合索引来取得里面的元素。相比数组来讲操作更方便,而且集合元素师可变的。

追问

我要循环建立的是对象,类。 怎样做?

追答

也是一样啊,int不也是一种类型么?可以替换成自定义的类,List ,

追问

可以给出个例子吗?比如类名是:lab,要在C#中可用奥

追答

赋值:
List lables = new List();
for (int i = 0; i < 10; i++)

Label lable = new Label();
lable.Text = i.ToString();
lables.Add(lable);

取值
string s="";
for(int i=0;i<lables.Count;i++)

s=s+lables[i]+",";


项目要引用
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

追问

我操作的是ListViewGroup这个类,也可以这样做吗?
ListViewGroup中没有
.Text
这个方法,怎样去表示啊

追答

其实都是一样的

本回答被提问者采纳
参考技术C 用arraylist追问

怎么用啊

追答

using System.Collections;
ArrayList mylist = new ArrayList();
mylist.add(0);
mylist.add(1);

foreach(int i in mylist)

messagebox.show(i);


输出,0,1,集合的索引号和存取的值可以是相同的。

如何在 C# 中获取变量的数据类型?

【中文标题】如何在 C# 中获取变量的数据类型?【英文标题】:How can I get the data type of a variable in C#? 【发布时间】:2012-07-22 23:03:31 【问题描述】:

如何找出某个变量所持有的数据类型? (例如 int、string、char 等)

我现在有这样的东西:

private static void Main()

   var someone = new Person();
   Console.WriteLine(someone.Name.typeOf());


public class Person

    public int Name  get; set; 

【问题讨论】:

你已经定义了类型 - int 这不清楚您所说的“找出数据类型”是什么意思。通常,答案是“您只需查看类成员签名,并以明确的方式说明类型”。您是否打算在运行时检查班级成员? 超出主题,但你在这里写的最好用 C# 写成这样:class Person public string Name get; set; class Person private string m_Name; public string Name get return m_Name; set m_Name = value; 。阅读有关Properties的文档 Jamiec 是对的。静态类型意味着声明永远设置你的类型。您的变量 n 只能是您声明的类型或继承的类型。在您的特定情况下,您选择显示一个 int,这是您无法继承的类型,因此 n 只能是一个 int。 【参考方案1】:

使用 GetType() 方法

http://msdn.microsoft.com/en-us/library/system.object.gettype.aspx

【讨论】:

【参考方案2】:

GetType()方法

int n = 34;
Console.WriteLine(n.GetType());
string name = "Smome";
Console.WriteLine(name.GetType());

【讨论】:

【参考方案3】:

一般来说,您几乎不需要进行类型比较,除非您使用反射或接口进行操作。尽管如此:

如果您知道要与之比较的类型,请使用 isas 运算符:

if( unknownObject is TypeIKnow )  // run code here

as 运算符执行转换,如果失败则返回 null 而不是异常:

TypeIKnow typed = unknownObject as TypeIKnow;

如果您不知道类型并且只需要运行时类型信息,请使用 .GetType() 方法:

Type typeInformation = unknownObject.GetType();

在较新版本的 C# 中,您可以使用 is 运算符来声明变量,而无需使用 as

if( unknownObject is TypeIKnow knownObject ) 
    knownObject.SomeMember();

以前你必须这样做:

TypeIKnow knownObject;
if( (knownObject = unknownObject as TypeIKnow) != null ) 
    knownObject.SomeMember();

【讨论】:

【参考方案4】:

只需将光标悬停在您感兴趣的成员上,然后查看工具提示 - 它会显示成员的类型:

【讨论】:

【参考方案5】:

其他答案对这个问题提供了很好的帮助,但有一个重要而微妙的问题,它们都没有直接解决。 C#中有两种考虑类型的方法:静态类型运行时类型

静态类型是源代码中变量的类型。因此,它是一个编译时概念。这是您在开发环境中将鼠标悬停在变量或属性上时在工具提示中看到的类型。

运行时类型是内存中对象的类型。因此,它是一个运行时概念。这是GetType() 方法返回的类型。

对象的运行时类型通常不同于保存或返回它的变量、属性或方法的静态类型。例如,你可以有这样的代码:

object o = "Some string";

变量的静态类型是object,但在运行时,变量的referent类型是string。因此,下一行将打印“System.String”到控制台:

Console.WriteLine(o.GetType()); // prints System.String

但是,如果您在开发环境中将鼠标悬停在变量 o 上,您将看到类型 System.Object(或等效的 object 关键字)。

对于值类型的变量,例如intdoubleSystem.Guid,你知道运行时类型总是和静态类型相同,因为值类型不能作为基类对于另一种类型;值类型保证是其继承链中派生最多的类型。对于密封引用类型也是如此:如果静态类型是密封引用类型,则运行时值必须是该类型的实例或 null

反之,如果变量的静态类型是抽象类型,那么保证静态类型和运行时类型是不同的。

用代码来说明:

// int is a value type
int i = 0;
// Prints True for any value of i
Console.WriteLine(i.GetType() == typeof(int));

// string is a sealed reference type
string s = "Foo";
// Prints True for any value of s
Console.WriteLine(s == null || s.GetType() == typeof(string));

// object is an unsealed reference type
object o = new FileInfo("C:\\f.txt");
// Prints False, but could be true for some values of o
Console.WriteLine(o == null || o.GetType() == typeof(object));

// FileSystemInfo is an abstract type
FileSystemInfo fsi = new DirectoryInfo("C:\\");
// Prints False for all non-null values of fsi
Console.WriteLine(fsi == null || fsi.GetType() == typeof(FileSystemInfo));

另一位用户编辑了这个答案以合并下面出现在 cmets 中的一个函数,这是一个通用的帮助方法,用于在运行时使用类型推断来获取对变量静态类型的引用,这要感谢 typeof

Type GetStaticType<T>(T x) => typeof(T);

你可以在上面的例子中使用这个函数:

Console.WriteLine(GetStaticType(o)); // prints System.Object

但除非您想保护自己免受重构,否则此功能的实用性有限。当您编写对GetStaticType 的调用时,您已经知道o 的静态类型是对象。你也可以写

Console.WriteLine(typeof(object)); // also prints System.Object!

这让我想起了我开始当前工作时遇到的一些代码,比如

SomeMethod("".GetType().Name);

而不是

SomeMethod("String");

【讨论】:

so variable.getType() 返回运行时类型(右侧类型),但返回静态类型(变量左侧类型)是什么? @barlop 在编译时已知。您可以使用typeof 在运行时获取静态类型的类型对象。 是的,我知道静态类型 = 编译时类型,运行时类型 = 动态类型。虽然重新获得了变量“a”的类型,但如果您执行typeof(int),则不能执行typeof(a),它将返回int,但不会检查变量“a”并向您显示“a”的类型。 .你可以说你不需要显示'a'的静态类型,可能是这样,但事实是它没有显示它。所以我看不出这里使用 typeof 有什么用。 @barlop 你可以这样做让类型推断为你处理它:Type GetStaticType &lt; T &gt; (T x) return typeof(T); @Jaquarh 您可能已经注意到,switch 现在支持用于类型测试的模式匹配(运行时类型,而非静态)。您无需打开从 GetType() 返回的值,而是直接打开变量。【参考方案6】:

很简单

variable.GetType().Name

它将返回您变量的数据类型

【讨论】:

这是不正确的:object o = "Hi!"; return o.GetType().Name; 返回 "String",而不是 "Object"【参考方案7】:

一种选择是使用如下的辅助扩展方法:

public static class MyExtensions

    public static System.Type Type<T>(this T v) => typeof(T);


var i = 0;
console.WriteLine(i.Type().FullName);

【讨论】:

【参考方案8】:

查看其中一种简单的方法

// 从控制台读取字符串

string line = Console.ReadLine(); 
int valueInt;
float valueFloat;

if (int.TryParse(line, out valueInt)) // Try to parse the string as an integer
    Console.Write("This input is of type Integer.");
else if (float.TryParse(line, out valueFloat)) 
    Console.Write("This input is of type Float.");
else
    Console.WriteLine("This input is of type string.");

【讨论】:

【参考方案9】:

使用Object.GetType 方法,这样就可以了。

如果你只想知道变量的类型:

var test = (byte)1;
Console.WriteLine(test.GetType());

【讨论】:

以上是关于求助 C# 中如何在变量名中含有某个变量的值,在线等......的主要内容,如果未能解决你的问题,请参考以下文章

菜鸟求助:c#三个窗体间传递数值

SQL中如何精确判断某字段含有某个值?

如何在分配的变量值更改时停止变量更改C#

如何确定字符串变量的值是不是在 C# 中更改?

在线求c#属性教程

vue中v-for循环如何将变量带入class的属性名中