Tag: c#

在c#中列出

我无法理解List背后的逻辑,因为它打破了一些基本规则。 List应该是值类型而不是引用类型。 如果必须在函数调用之间保持其值,则必须通过ref关键字传递List 。 所以这意味着它正在显示类似于int的值类型行为。 但是List必须由new运算符初始化。 List也可以为null。 这意味着引用类型行为。 可空类型是不同的,因为它不必由新运算符初始化。 我在这看错了吗? EDITED- 我应该在原始问题中发布代码。 但它遵循 – namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ListTest d = new ListTest(); d.Test(); } } class ListTest { public void ModifyIt(List l) { l = returnList(); } public void Test() { List listIsARefType = new List(); ModifyIt(listIsARefType); […]

使用ref节省内存传递引用类型吗?

在C#中,方法的参数可以是引用类型或值类型。 传递引用类型时,将传递引用的副本。 这样,如果在方法内部我们尝试将传递的引用重新分配给另一个对象实例,则在该方法之外,重新分配是不可见的。 为了使其工作,C#具有ref修饰符。 使用ref传递引用类型实际上使用原始引用而不是副本。 (如我错了请纠正我)。 在这种情况下,由于我们没有创建引用的副本,我们是否保存了任何内存? 如果广泛调用方法,这是否会提高应用程序的整体性能? 谢谢!

运算符’&&’不能应用于’bool’和’int’类型的操作数

我有一个if elseif语句来检查标记并根据条件对标记进行评分。 int marks; string grade; if (marks>=80 && marks!>100) { grade = “A1”; } else if (marks>=70 && marks!>79) { grade = “A2”; } 等等….. 但是,当我编译它时,我得到了 运算符’&&’不能应用于’bool’和’int’类型的操作数 帮我修好它。谢谢你提前。

是否可以将数组绑定到DataGridView控件?

我有一个数组arrStudents,其中包含我的学生的年龄,GPA和姓名,如下所示: arrStudents[0].Age = “8” arrStudents[0].GPA = “3.5” arrStudents[0].Name = “Bob” 我试图将arrStudents绑定到DataGridView,如下所示: dataGridView1.DataSource = arrStudents; 但是数组的内容不会出现在控件中。 我错过了什么吗?

如何在C#中将UIntPtr对象转换为IntPtr?

我需要在我的C#.NET 2.0应用程序中将UIntPtr对象转换为IntPtr对象。 如何实现这一目标? 我不认为它就像这样简单: UIntPtr _myUIntPtr = /* Some initializer value. */ object _myObject = (object)_myUIntPtr; IntPtr _myIntPtr = (IntPtr)_myObject;

c#正则表达式匹配字符串中的特定索引?

我想测试一个正则表达式是否匹配特定索引处的字符串的一部分(并且仅从该特定索引开始)。 例如,给定字符串“one two 3 4 five”,我想知道,在索引8处,正则表达式[0-9] +将匹配“3”。 RegularExpression.IsMatch和Match都采用起始索引,但是如果需要,它们都将搜索字符串的其余部分以进行匹配。 string text=”one two 3 4 five”; Regex num=new Regex(“[0-9]+”); //unfortunately num.IsMatch(text,0) also finds a match and returns true Console.WriteLine(“{0} {1}”,num.IsMatch(text, 8),num.IsMatch(text,0)); 显然,我可以检查结果匹配是否从我感兴趣的索引开始,但是我将在大字符串上执行此操作很多次,所以我不想浪费时间在字符串中搜索匹配项。 另外,我不会事先知道我将实际测试字符串的正则表达式。 我不想: 将字符串分割成某些边界,就像空格一样,因为在我的情况下,我事先并不知道合适的边界是什么 必须以任何方式修改输入字符串(比如在索引8处获取子字符串然后在正则表达式中使用^) 搜索字符串的其余部分以进行匹配,或者针对大字符串执行大量测试所不具备的其他任何内容。 我想使用任意用户提供的语法解析潜在的大型用户提供的文本正文。 语法将以BNF或类似PEG的语法定义,终端将是字符串文字或正则表达式。 因此,我需要检查字符串的下一部分是否与语法驱动的任何潜在终端匹配。

C#语音识别

我现在正在制作智能家居控制系统,我有一点问题。 我正在考虑将Cosmos用于基本系统,并为其添加所需的命名空间库,但由于通常的System.Speech.Recognition命名空间过分依赖于Windows Speech API,我不得不忘记使用它。 所以我的问题是,是否有任何(如果可能的话免费)语音识别和/或语音合成器库用于C#,具有以下内容: 支持多语言发言 从语音样本中提取文本内容 用可选择的(或用户编写的)语音模式(语音)合成语音 一般用法,非Windows依赖库是最好的,当然,如果它也是免费的。

在C#中更新foreach循环中的struct

我有这个代码(C#): using System.Collections.Generic; namespace ConsoleApplication1 { public struct Thing { public string Name; } class Program { static void Main(string[] args) { List things = new List(); foreach (Thing t in things) // for each file { t.Name = “xxx”; } } } } 它不会编译。 错误是: Cannot modify members of ‘t’ because it is a […]

读取属于另一个应用程序的配置文件的最简单方法

除了使用原始XML之外,在.NET中有一种简单的方法可以打开和读取属于另一个程序集的配置文件……? 我不需要写它,只需从中获取几个值。

使用COM互操作从BS ++到C#编组BSTR

我有一个用C ++编写的进程外COM服务器,它由一些C#客户端代码调用。 其中一个服务器接口上的方法将大型BSTR返回给客户端,我怀疑这会导致内存泄漏。 该代码有效,但我正在寻找有关编组BSTR的帮助。 简化一下,服务器方法的IDL是 HRESULT ProcessRequest([in] BSTR request, [out] BSTR* pResponse); 并且实现如下: HRESULT MyClass::ProcessRequest(BSTR request, BSTR* pResponse) { USES_CONVERSION; char* pszRequest = OLE2A(request); char* pszResponse = BuildResponse(pszRequest); delete pszRequest; *pResponse = A2BSTR(pszResponse); delete pszResponse; return S_OK; } A2BSTR在内部使用SysAllocStringLen()分配BSTR。 在C#客户端中,我只需执行以下操作: string request = “something”; string response = “”; myserver.ProcessRequest(request, out response); DoSomething(response); 这样做,因为请求字符串被发送到COM服务器并且正确的响应字符串被返回给C#客户端。 但是每次往返服务器都会泄漏服务器进程中的内存。 crt泄漏检测支持显示crt堆上没有重大泄漏,所以我怀疑泄漏是用IMalloc分配的。 […]