staticC 中的函数是否可能更快,因为编译器的优化器会看到所有调用点并因此优化被调用函数的结语和序言?
好的 - 所以我知道构建提供功能的工厂方法很简单; 但鉴于Dictionary<TKey, TValue>是IEnumerable<KeyValuePair<TKey, TValue>>,不应该它有一个构造函数等同于,例如,List<T>的ctor(IEnumerable<T> range)?
它甚至更狡猾,因为它提供了一个IDictionary<TKey, TValue>作为源的Ctor ,但由于该接口也是IEnumerable<KeyValuePair<TKey, TValue>>,IEnumerable选项肯定会更有意义; 除非在IEnumerable<>课程首次设计时界面不在身边.
它变得更糟,因为如果你看一下ctor的IDictionary版本的实现 - 使用以下代码导入输入字典:
foreach (KeyValuePair<TKey, TValue> pair in dictionary)
{
this.Add(pair.Key, pair.Value);
}
Run Code Online (Sandbox Code Playgroud)
任何人都想到一个很好的理由,为什么框架设计者在基本界面需要的时候选择了最具体的界面?
编辑
@Mark Seeman建议避免由重复键引发异常 - 这可能接近事实 - 但请考虑这个例子:
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void How_To_Break_The_IDictionary_Ctor_Design_Decision()
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("hello", "world");
dictionary.Add("Hello", "world");
Dictionary<string, string> dictionary2 =
new Dictionary<string, string>(dictionary,
StringComparer.CurrentCultureIgnoreCase);
}
Run Code Online (Sandbox Code Playgroud)
我知道 - 测试反过来 - 但出于某种原因我认为这让我的观点更好:)
鉴于Key comparer不是IDictionary接口的一部分,您 …
我的ViewState有问题.我有一个aspx页面左侧有一个树视图,右侧有一个带有ASP.NET面板的UpdatePanel.它位于内部面板中,我可以动态加载和卸载用户控件.我使用该更新面板加载动态控件.
我还为我的用户控件创建了一个自定义控件,因为我需要从页面传递一些值.在该构造函数上,我使用ViewState来存储这些值.
我第一次加载用户控件时,我用参数调用它的构造函数.当我在每个回发上重新加载该用户控件时,我使用它的普通构造函数.
我的问题是我在ViewState上存储的值在连续回发时变为null.
更新:
这是我的用户控件:
public class MyUserControl : System.Web.UI.UserControl
{
private int PKId
{
get { return ViewState["pkId"] as int; }
set { ViewState["pkId"] = value; }
}
public MyUserControl(int pkId)
{
this.PKId = pkId;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我正在按照这篇文章动态加载控件:http://msdn.microsoft.com/en-us/magazine/cc748662.aspx#id0070065.
第二次更新:
我在第一次加载用户控件时和每个原型上都设置了相同的控件ID.
也许我可以使用另一种方法来存储这些值,如输入隐藏字段或缓存.我选择了ViewState,因为我不想为每个用户重载带有Session值的服务器.
第三次更新:
I load the controls with this code:
System.Web.UI.UserControl baseControl = LoadControl(ucUrl) as System.Web.UI.UserControl;
if (baseControl != null)
{
baseControl.ID = "DestinationUserControl";
PanelDestination.Controls.Add(baseControl);
}
Run Code Online (Sandbox Code Playgroud)
和reaload这段代码:
DynamicControls.CreateDestination ud = this.LoadControl(TrackedUserControl) as DynamicControls.CreateDestination;
if …Run Code Online (Sandbox Code Playgroud) GridViews我的页面中有3个.
使用SelectedIndexChanged我放入的事件GridView2和GridView3数据,GridView1
但是当我重新启动应用程序时,GridView1数据仍然存在于浏览器中.
我使用会话变量来存储数据.我怎么能清楚GridView1
我有一个修改一些文件的进程,我想通过命令行tortoise SVN提交它们,而不必点击确定.对话框出现,我的脚本被迫等到我点击确定.以下是我使用的参数:
TortoiseProc.exe /command:commit /path:"c:\svn\MyProject" /notempfile /logmsg:"Files Modified 2010-02-12" /closeonend:3
Run Code Online (Sandbox Code Playgroud) 我有一个点击跟踪AJAX功能(WebMethod在.aspx页面上调用),我需要在用户点击链接时调用它.
不幸的是,我正在使用window.location = "newUrl"更改页面,这似乎使AJAX调用失败.有没有解决的办法?
我不需要从AJAX调用中获取任何信息,我只需要确保WebMethod调用它.
我知道我可以重定向success()或failure()调用,但是我必须等待clickTracking()方法运行,这需要〜1s.这是项目规范中的协议所不能接受的,因此不是一个可行的解决方案.
我有以下字典:
Dictionary<long, ChangeLogProcess> _changeLogProcesses =
new Dictionary<long, ChangeLogProcess>();
Run Code Online (Sandbox Code Playgroud)
我有一个方法试图在特定状态的字典中获取下一个changelogprocess(如果没有特定状态的项,则返回null):
var changeLogProcesses =
from entry in _changeLogProcesses
where (entry.Value.Status == status)
select entry.Value;
changeLogProcess = changeLogProcesses.FirstOrDefault<ChangeLogProcess>();
Run Code Online (Sandbox Code Playgroud)
但是,在执行期间,它在linq查询期间抛出了堆栈溢出异常?我做了很多测试,以确保列表中有项目等等,但问题仍然存在?
值得注意的是,此方法是在多线程环境中运行的服务的一部分.上面的linq查询(以及对它的所有访问,例如添加/删除到列表中的项目,或列表中项目的状态更改)都包含在ReaderWriterLockSlim写锁中.同样,我已经对它进行了广泛的调试,以确保在任何时候都不会有单个线程访问列表.
什么可能导致它堆栈溢出,因为与一些可能的其他错误相关,例如在查询期间修改列表?(再次,我在任何时候只有一个线程访问列表)
编辑:根据要求获取getter和setter代码:
public ChangeLogProcessStatus Status
{
get { return _status; }
set
{
//more that one place can initiate a retry now, so retry count is handled in the property setter
if (PreviousStatus <= ChangeLogProcessStatus.Waiting && value >= ChangeLogProcessStatus.RetryWaiting)
{
this.ChangeLog.Tries++;
//If it's retry waiting, remove this last service machine from the
//list …Run Code Online (Sandbox Code Playgroud) 我必须存储一个大于long数据类型的最大值的整数值.如何在内存中存储和操作此值?
如果可能的话,请通过一个例子来说明.
有没有办法让应用在收到新电子邮件时收到通知?我的目标是,如果收到具有特定主题的电子邮件(发送声音,振动,无论如何),请将其视为"过滤器"或"规则",但我不想查看电子邮件服务器由我自己.我想我正在寻找像"android.telephony.PhoneStateListener"这样的东西,但是对于电子邮件.
以下javascript做什么?
var groups = countrylist.split(',');
for( var i = -1, group; group = groupsCounty[++i]; ){
...
}
Run Code Online (Sandbox Code Playgroud) asp.net ×3
c# ×3
.net ×2
c ×2
javascript ×2
ajax ×1
android ×1
dictionary ×1
email ×1
function ×1
generics ×1
gridview ×1
integer ×1
jquery ×1
linq ×1
loops ×1
optimization ×1
pagemethods ×1
static ×1
tortoisesvn ×1