小编jan*_*jan的帖子

asp.net c#MVC:如何在没有ViewState的情况下生活?

我只是想将WebForms转换为MVC:

在.net MVC中,哪些概念使ViewState成为不需要的东西?

如果表格在iteself上回发等(即回发)?page/usercontrol如何保持其状态?

人们在维持某种状态而不采用会话状态方面有什么技巧?

当然,完全无国籍的环境不存在?

c# viewstate asp.net-mvc

52
推荐指数
3
解决办法
4万
查看次数

测试用例和断言陈述

这个问题的代码让我思考

assert(value>0); //Precondition
if (value>0)
{
  //Doit
}
Run Code Online (Sandbox Code Playgroud)

我从不写if语句.断言就足够/你可以做的一切."早点崩溃,经常崩溃"

CodeComplete说明:

  • assert语句使应用程序正确
  • if-test使应用程序更健壮

我不认为您通过更正无效输入值或跳过代码使应用程序更加健壮:

assert(value >= 0 );  //Precondition
assert(value <= 90);  //Precondition
if(value < 0)         //Just in case
  value = 0;
if (value > 90)       //Just in case
  value = 90;
//Doit
Run Code Online (Sandbox Code Playgroud)

这些更正是基于您对外部世界的假设.只有调用者知道你的函数的"有效输入值"是什么,并且他必须在调用你的函数之前检查它的有效性.

CodeComplete来解释:" 当我们依赖于断言时,真实世界的程序会变得太乱."

问题:我错了,顽固,愚蠢,太不防守......

defensive-programming

12
推荐指数
1
解决办法
1355
查看次数

执行所需的函数调用

我在C#中有一个"Status"类,使用如下:

Status MyFunction()
{
   if(...) // something bad
     return new Status(false, "Something went wrong")
   else
     return new Status(true, "OK");
}
Run Code Online (Sandbox Code Playgroud)

你明白了.MyFunction的所有调用者都应检查返回的状态:

Status myStatus = MyFunction();
if ( ! myStatus.IsOK() )
   // handle it, show a message,...
Run Code Online (Sandbox Code Playgroud)

然而,懒惰的呼叫者可以忽略状态.

MyFunction(); // call function and ignore returned Status
Run Code Online (Sandbox Code Playgroud)

要么

{
  Status myStatus = MyFunction(); 
} // lose all references to myStatus, without calling IsOK() on it
Run Code Online (Sandbox Code Playgroud)

有可能使这不可能吗?例如抛出异常

一般来说:是否可以编写一个C#类,您必须在其上调用某个函数?

在Status类的C++版本中,我可以在析构函数中对某些私有bool bIsChecked编写测试,并在有人不检查此实例时响铃.

C#中的等价选项是什么?我在某处读到"你不想在你的C#类中使用析构函数"

IDisposable接口的Dispose方法是一个选项吗?

在这种情况下,没有非托管资源可供免费使用.此外,GC 不会确定何时处置该对象.当它最终被处置时,是否仍然可以知道忽略该特定Status实例的位置和时间?"using"关键字确实有帮助,但同样,懒惰的调用者 …

c# garbage-collection dispose destructor

9
推荐指数
3
解决办法
503
查看次数

通过代理连接到BitBucket

海,

我尝试 从我在Bitbucket.org上的私人仓库中拉出
我 需要Windows身份验证的公司代理后面的
Windows机器上的本地仓库
.

  • 我找到了代理服务器和端口(IE的Internet选项)
  • 我找到了我的设置Mercurial.ini文件%USERPROFILE%
  • 我将此部分添加到它(信息):

    [http_proxy]
    host = TheProxyServer:TheProxyServerPort
    user = MyWindowsLogin
    passwd =MyWindowsPassword

  • 这有效:

C:\ path\to\repo> hg pull
http授权所需域
:Bitbucket.org HTTP
用户:

在我输入Bitbucket的凭证后,我得到:

搜索更改
未找到任何更改

但是写下密码Mercurial.ini显然是一个主要的安全问题(除了因为我们的密码策略而每个月都要更新这个文件).

是否有可能让Mercurial要求代理凭证?
或者以更安全的方式存储这些凭据?

编辑:

我尝试使用相同的设置和SSH,但我得到了这个:

C:\ path\to\repo> hg clone ssh://hg@bitbucket.org/ ME/repo/
running""C:\ Program Files\TortoiseHg\TortoisePlink.exe"-ssh -2 hg@bitbucket.org" hg -R ME/repo/serve --stdio"

中止:远程hg没有合适的回复!

一个对话框: "PuTTY Fatal Error - Network error: Connection timed out"

EDIT2:

出现这个问题是因为Subversion正确处理了这种情况: …

svn proxy mercurial bitbucket

7
推荐指数
2
解决办法
4257
查看次数

Mercurial可以使用更好的差异工具来更有效地存储其变更集吗?

我使用TortoiseHg来提交更改.提交对话框中显示的(默认)diff包含许多添加/删除.

但相比之下,当我点击提交对话框中的差异图标时,KDiff3打开并且该比较更加"智能":它检测到"更好"我改变的内容:我移动了一段代码,导致更少的添加/缺失.

由于Hg" ...存储了将旧版本转换为新版本所需的更改. ",我想知道是否可以利用KDiff3的"智能"将这些更改存储在Hg提交中?

另一个问题中提出的解决方案似乎不适用于TortoiseHg提交对话框.

提前致谢!

diff mercurial tortoisehg kdiff3

7
推荐指数
1
解决办法
2785
查看次数

使用SharpSVN添加文件

我想使用SharpSVN将目录下的所有未版本控制的文件添加到SVN.

我首先在命令行上尝试了常规的svn命令:

C:\temp\CheckoutDir> svn status -v
Run Code Online (Sandbox Code Playgroud)

我看到所有子目录,已经签入的所有文件,一些标有"?"的新文件,没有"L"锁定指示

C:\temp\CheckoutDir> svn add . --force
Run Code Online (Sandbox Code Playgroud)

这导致添加了已经在版本控制下的子目录中的所有新文件.

我想用SharpSVN做同样的事情.我将一些额外的文件复制到同一目录并运行此代码:

...
using ( SharpSvn.SvnClient svn = new SvnClient() )
{
    SvnAddArgs saa = new SvnAddArgs();
    saa.Force = true;
    saa.Depth = SvnDepth.Infinity;
    try
    {
        svn.Add(@"C:\temp\CheckoutDir\." , saa);
    }
    catch (SvnException exc)
    {
        Log(@"SVN Exception: " + exc.Message + " - " + exc.File);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是引发了一个SvnException:

  • SvnException.Message:锁定工作副本'C:\ temp\CheckoutDir'
  • SvnException.File:..\..\..\subversion\libsvn_wc\lock.c"

我的代码中没有运行其他svnclient实例,我也尝试过调用

svn.cleanup()
Run Code Online (Sandbox Code Playgroud)

就在Add之前,但无济于事.

由于文档相当模糊;),我想知道这里是否有人知道答案.

提前致谢!

一月

c# svn sharpsvn

5
推荐指数
1
解决办法
6775
查看次数

Linq表现:Any vs. Contains

这个问题关系到这一个,但不完全一样,我认为.

鉴于:

class Foo
{
  public string Bar { get; set; }
}
...
var c1 = new List<Foo>() { ... };
var c2 = new List<Foo>() { ... };
Run Code Online (Sandbox Code Playgroud)

以下2个循环给出相同的结果:

  foreach (var item in c2.Where(f => c1.Any(f1 => f1.Bar.Equals(f.Bar))))
  { ... }

  foreach (var item in c2.Where(f => c1.Select(f1 => f1.Bar).Contains(f.Bar)))
  { ... }
Run Code Online (Sandbox Code Playgroud)

它们同样快吗?

另一个问题的区别在于,Select这里的额外声明是否会改变底层集合的本质的重要性.

换句话说:这包含:

foos.Contains(foo1)
Run Code Online (Sandbox Code Playgroud)

采取与此相同的"收集"行为:

foos.Select(f=>f.Bar).Contains(foo1.Bar)
Run Code Online (Sandbox Code Playgroud)

我可能的想法可能是:"一旦我们落后于Linq的Select,一切都只是'Lists',所以Any和Contains都是O(n)."

c# linq performance

5
推荐指数
1
解决办法
2万
查看次数

SqlDataReader只返回SqlCommand中的第一个select

我正在使用SqlCommand在SqlServer2005数据库上执行sql语句.(我也试过DbCommand.)

如果我在SQL Server Management Studio中执行此sql,我可以发送"结果到文本".我想在我的C#代码中捕获这个文本.

是相关的问题,但不一样:

我的sql在print语句旁边还包含不同的select语句:

PRINT 'We are here'
SELECT Name FROM Table1
-- do some logic
SELECT Name, Country FROM Table1
PRINT 'We are done'
Run Code Online (Sandbox Code Playgroud)

(" Strange sql "我听到你说.我知道,但这就是我们长期维护脚本的样子.)

我可以使用SqlConnection.InfoMessage单独捕获PRINT语句.

但是SqlDataReader似乎不支持2个select语句,两者都使用不同的FieldCount.

我担心我会遇到Process.Start和sql server命令行sqlcmd并读取输出,但我正在寻找更多的API'ish.

提前致谢!

c# text sql-server-2005

4
推荐指数
2
解决办法
2231
查看次数

TFS提交未更改的文件

我们正在使用MS Visual Studio 2008.

TFS似乎考虑了文件或其他东西的创建日期,以确定是否应该提交文件.

是否可以仅对文件名和内容进行TFS测试?

  • 我查看了一个xml或txt文件
  • 我复制内容
  • 我打开记事本并粘贴
  • 我使用相同的名称保存文件,并确认覆盖
  • 我提交:TFS 默认选择提交文件

虽然名称和内容已经改变.

我们的具体用例:
我们每晚运行一个生成xml文件的脚本(覆盖现有文件)并提交它们.我们只想提交实际改变的那些以保持历史清洁.

提前致谢!
一月

diff tfs commit

4
推荐指数
2
解决办法
2130
查看次数