请帮助我,因为我有点困惑..我在C#winforms项目中有一个表单,并且有几个方法可以执行这个特定表单和所有派生的一些任务,因此其中一个辅助方法可以制作示例..这个应该用数据集填充组合框.它现在正常工作,但当我使用此签名编码方法时
protected void FillComboBox(kComboBox target, IEntClass_DA entity)
{
target.DataSource = entity.GetList().Tables[0];
target.DisplayMember = "name";
target.ValueMember = "id";
}
Run Code Online (Sandbox Code Playgroud)
我看到组合框中的displayMember和ValueMember在方法调用后没有保存值.我只是认为我应该使用ref参数,因此在只读参考变量中不会浪费掉asignments.
那时候还可以,但稍后,将整个表单作为参数进行练习我被编译器警告,注意这不能作为ref参数传递,因为它是只读的.好吧,我继续工作,看到即使没有ref关键字,我可以使用表单中的ref变量,更新一些属性,看看更改.
所以这里发生了什么:将控件的引用传递给helper方法使我能够更改其成员,即使不使用ref参数?
谢谢.
我正在研究一些C#代码,并且有8个点,它们被放入6个点数组中,每个数组都有不同的组合,类似于下面的示例:
Point pt10 = new Point(10,10);
Point pt20 = new Point(20,20);
Point pt30 = new Point(30,30);
Point[] ptArr1 = {pt10, pt20};
Point[] ptArr2 = {pt10, pt30};
Run Code Online (Sandbox Code Playgroud)
然后我注意到,在初始化Point数组之后,对数据的更改没有反映在数组中,这告诉我数组包含原始Points的副本,而不是Points本身.这在内存方面是否浪费,如果是这样,有没有办法让数组引用Points,而不是复制值?
作为开发人员,如果不更改引用所指向的参数类型参数,则使用ref关键字将该参数传递给方法,我会获得什么?
我已经读过两个,带有引用类型参数的ref关键字和C#中引用类型变量的"ref"有什么用?和其他一些人.我知道这个问题已经被问过很多次了.我相信我在问一个独特的问题.如果你认识其他的wize,请随时记下我的问题.
简单的课程:
public class Person
{
public Person(string first, string last)
{
FirstName = first;
LastName = last;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public override string ToString()
{
return string.Format("{0} {1}", FirstName, LastName);
}
}
Run Code Online (Sandbox Code Playgroud)
使用关键字'ref'传递表单:
public partial class Form2 : Form
{
private Person _person;
public Form2()
{
_person = new Person("John", "Doe");
InitializeComponent();
}
protected override void …Run Code Online (Sandbox Code Playgroud) 我在我们的应用程序中找到了一些代码,它通过List<T>引用来表明它已被修改:
void DoSomething(ref List<MyType> theList)
{
theList.Add(new MyType());
}
Run Code Online (Sandbox Code Playgroud)
我认为很明显ref-keyword在这种情况下已经过时了,因为我们还可以在没有关键字的情况下向列表中添加新元素.但是它表明我们修改了列表或至少修改了它的元素.我发现如果你有很多参数并希望看到哪些参数被修改以及哪些只是作为值来传递,那么这个特别有用.
如果这是好的问题肯定是基于意见的,对SO来说是无效的,我宁愿问是否有另一种方法来实现这一点,或者我是否应该关心它.
编辑:稍微澄清一下我的问题.如果列表被修改,则不会出现此问题,这只是一个示例.或者我也使用任何其他参考类型,而不仅仅是List<T>.
我有一个输入标签,当我按下转义键时,我希望输入元素上的焦点消失,这意味着不再有文本光标或任何焦点样式(当用户输入时,他们的输入不会进入输入标签)。
下面的代码是我尝试实现上述功能的尝试,但它没有按预期工作。我想让这段代码按预期工作。
import React, { useRef } from 'react';
const onEscape = function (action) {
window && window.addEventListener('keydown', (e) => {
if (e.key === "Escape") {
action();
};
});
};
const MyComponent = () => {
...
const descRef = useRef();
onEscape(() => {
descRef.blur();
});
return (
<div>
<input
ref={descRef}
...
/>
</div>
);
};
Run Code Online (Sandbox Code Playgroud)
我已经测试了该onEscape函数,并且在将其他操作传递给它时它可以工作(当用户按下转义键时,它会执行传递给 onEscape 函数的任何函数)
我想从列表中获取一个子列表并对其执行操作。并且结果应该应用于主列表
var myNumber = new List<int>() { 1, 5, 9, 7, 2, 8, 2 };
var subNumbers = myNumber.GetRange(2, 4); // { 9, 7, 2, 8 }
for (int i = 0; i < subNumbers.Count; i++)
{
subNumbers[i] = (int)Math.Pow(subNumbers[i], 2); // {81, 49, 4, 64 }
}
// For example, applied to 'myNumbers'
WriteLine(string.Join(", ", myNumbers)); // I want the output to be: { 1, 5, 81, 49, 4, 64, 2 }
Run Code Online (Sandbox Code Playgroud) 在C#ref和out关键字中.
它如何影响内存管理?内存管理ref和out关键字有什么区别吗?