假设我的fooJavaScript代码中有一个对象. foo是一个复杂的对象,它是在其他地方生成的.如何更改foo对象的原型?
我的动机是将适当的原型设置为从.NET到JavaScript文字序列化的对象.
假设我在ASP.NET页面中编写了以下JavaScript代码.
var foo = <%=MyData %>;
Run Code Online (Sandbox Code Playgroud)
假设这MyData是在对象JavaScriptSerializer上调用.NET的结果Dictionary<string,string>.
在运行时,这将变为以下内容:
var foo = [{"A":"1","B":"2"},{"X":"7","Y":"8"}];
Run Code Online (Sandbox Code Playgroud)
如您所见,foo成为一个对象数组.我希望能够foo使用适当的原型进行初始化.我不是要修改Object.prototype,也没有Array.prototype.我怎样才能做到这一点?
我总是对在命令后应该使用GO关键字以及命令末尾是否需要分号时感到困惑.有什么区别以及为什么/何时应该使用它们?
当我在SQL Server Management Studio中运行Generate-script时,它似乎在整个地方使用GO,但不是分号.
我有一个简单的WPF表单,在表单上Grid声明.这Grid有一堆行:
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="30" />
<RowDefinition Height="Auto" Name="rowToHide" />
<RowDefinition Height="Auto" MinHeight="30" />
</Grid.RowDefinitions>
Run Code Online (Sandbox Code Playgroud)
命名行rowToHide包含一些输入字段,我想在检测到我不需要这些字段后隐藏这一行.它很简单,只需设置Visibility = Hidden行中的所有项目,但该行仍占用空间Grid.我尝试设置Height = 0项目,但似乎没有用.
你可以这样想:你有一个表格,在那里你有一个下拉说"付款类型",如果这个人选择"现金",你想要隐藏包含卡详细信息的行.这个隐藏的表单不是一个选项.
有好文章提出了不同的实施方式INotifyPropertyChanged.
考虑以下基本实现:
class BasicClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
private int sampleIntField;
public int SampleIntProperty
{
get { return sampleIntField; }
set
{
if (value != sampleIntField)
{
sampleIntField = value;
FirePropertyChanged("SampleIntProperty"); // ouch ! magic string here
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想用这个替换它:
using System.Runtime.CompilerServices;
class BetterClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
// Check the attribute …Run Code Online (Sandbox Code Playgroud) 我有一个经典的例子,试图从一个集合中删除一个项目,同时在循环中枚举它:
List<int> myIntCollection = new List<int>();
myIntCollection.Add(42);
myIntCollection.Add(12);
myIntCollection.Add(96);
myIntCollection.Add(25);
foreach (int i in myIntCollection)
{
if (i == 42)
myIntCollection.Remove(96); // The error is here.
if (i == 25)
myIntCollection.Remove(42); // The error is here.
}
Run Code Online (Sandbox Code Playgroud)
在发生更改后的迭代开始时,InvalidOperationException会抛出一个,因为枚举器在底层集合发生更改时不喜欢.
我需要在迭代时对集合进行更改.有许多模式可用于避免这种情况,但它们似乎都没有一个好的解决方案:
不要在此循环内删除,而是保留一个单独的"删除列表",在主循环后处理.
这通常是一个很好的解决方案,但在我的情况下,我需要项目立即消失为"等待"直到主循环后真正删除项目更改我的代码的逻辑流程.
只需在项目上设置一个标志并将其标记为非活动状态,而不是删除该项目.然后添加模式1的功能以清理列表.
这会工作为我所有的需求,但它意味着一个很大的代码将在开始按每一个项目被访问时检查不活动的标志改变.根据我的喜好,这是太多的管理.
以某种方式将模式2的思想融入到源自的类中List<T>.此超级列表将处理非活动标志,事后删除对象,也不会将标记为非活动的项目暴露给枚举使用者.基本上,它只是封装了模式2(以及随后的模式1)的所有想法.
这样的课程存在吗?有没有人有这个代码?或者,还有更好的方法?
我被告知访问myIntCollection.ToArray()而不是myIntCollection将解决问题,并允许我在循环内删除.
这对我来说似乎是一个糟糕的设计模式,或者它可能没问题?
细节:
该列表将包含许多项目,我将只删除其中的一些项目.
在循环内部,我将执行各种过程,添加,删除等,因此解决方案需要相当通用.
我需要删除的项目可能不是循环中的当前项目.例如,我可能在30项循环的项目10上并且需要移除项目6或项目26.因此,向后穿过阵列将不再起作用.O(
我想用一维数组表示一个二维数组.函数将传递两个指标(x,y)和要存储的值.这两个标记代表一维阵列的单个元素,并相应地设置它.我知道1D数组需要有arrayWidth×arrayHeight的大小,但我不知道如何设置每个元素.
例如,我如何区分(2,4,3)和(4,2,3)?我尝试将数组设置为x*y,但是2*4和4*2将导致数组中的相同位置,我需要它们不同.
据我所知,strlcpy和strlcat被设计为安全的替代品strncpy和strncat.然而,有些人仍然认为他们不安全,只是造成不同类型的问题.
有人可以举例说明如何使用strlcpy或strlcat(即一个总是 null终止其字符串的函数)会导致安全问题吗?
Ulrich Drepper和James Antill表示这是事实,但从未提供实例或澄清这一点.
getenv()和之间有什么区别$_ENV?
使用它们之间的任何权衡?
我注意到有时getenv()会给我我需要的东西,而$_ENV不是(如HOME).
NHibernate渴望加载可以使用Fetch和完成FetchMany,如在Mike Hadlow博客上的NHibernate Linq Eager Fetching中所述.
这两种方法有什么区别,在什么情况下都会使用?
将ButtonWPF应用程序中的Commands 绑定到VIEWMODEL类中的s 非常容易.我想为a实现类似的绑定TextBox.
我有一个TextBox和我需要将其绑定到Command一个触发,当我击中Enter而TextBox被聚焦.目前,我正在为KeyUp事件使用以下处理程序,但它看起来很丑......我不能把它放在我的VIEWMODEL课堂上.
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.Enter)
{
// your event handler here
e.Handled = true;
MessageBox.Show("Enter Key is pressed!");
}
}
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
c# ×3
c ×2
wpf ×2
.net ×1
arrays ×1
enumeration ×1
fetch ×1
foreach ×1
grid ×1
icommand ×1
javascript ×1
linq ×1
list ×1
nhibernate ×1
php ×1
security ×1
sql ×1
sql-server ×1
strlcpy ×1
strncpy ×1