小编Jon*_*ney的帖子

C#将字符串"0"解析为整数

我有一台新的笔记本电脑在工作,本周早些时候工作的代码今天不起作用.

以前工作的代码是简化的:

while (dr.Read())
{
    int i = int.Parse(dr.GetString(1))
}
Run Code Online (Sandbox Code Playgroud)

现在它在数据库值为0时失败.有时,但不可靠,这将起作用:

while (dr.Read())
{
    int i = Convert.ToInt32(dr["FieldName"]))
}
Run Code Online (Sandbox Code Playgroud)

我错过了一些愚蠢的东西吗?

奇怪的是,ReSharper也遇到了大量奇怪的错误,我使用上面的代码得到了相同的错误信息:"输入字符串的格式不正确." (在我加载项目之前开始.)

有任何想法吗?任何有SP问题的人?当我拿到机器时,我确实试图确保所有的SP都是最新的.

编辑:我知道如何使用Try.Parse和错误处理.这里的代码是简化的.我正在从数据库表中读取测试用例.此列仅包含0,1和2值.我已经证实了这一点.我打破了这一点,将数据库字段放入字符串变量s然后尝试int.Parse(s).该代码本周早些时候工作,数据库没有改变.唯一改变的是我的环境.

为了完全简化问题,这行代码抛出异常("输入字符串格式不正确"):

 int.Parse("0");
Run Code Online (Sandbox Code Playgroud)

编辑:感谢大家帮我解决这个问题!解决方案是强制重置我的语言设置.

c#

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

Type.GetProperties()是否保证PropertyInfo []结果的某个顺序?

Type.GetProperties()是否保证其PropertyInfo []结果的某个顺序?例如按属性名称或它们在代码中出现的顺序按字母顺序返回它们.或者订单是否未定义?

c# reflection

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

存储过程级别的SQL事务与SqlConnection级别的SQL事务之间有什么区别?

假设MSSQL Server上的存储过程使用了一个SQL事务BEGIN TRANSACTION/COMMIT TRANSACTION,这与开始和使用ADO.NET通过提交一个有SqlConnection.BeginTransaction()什么不同?

.net sql-server ado.net transactions

6
推荐指数
1
解决办法
2582
查看次数

为什么使用Moq创建的模拟实例会抛出System.BadImageFormatException?

这个问题可能与另一个问题有关,它肯定会导致System.BadImageFormatException.也许它是相同的东西,但暴露不同?

我有以下代码:

public interface IFoo<T> where T : class, new() {
  T FooMethod(object o);
}

public interface IFooRepo {
  F GetFoo<T, F>() where T : class, new() where F : IFoo<T>;
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个测试,使用Moq模拟IFooRepo,如下所示:

var instance = new Mock<IFooRepo>().Object;
Run Code Online (Sandbox Code Playgroud)

上面的代码运行正常,除非在使用Visual Studio 2008调试测试时.当我跳过上面的行时,会通过Castle.DynamicProxy从System.Reflection.Emit抛出System.BadImageFormatException.难道这是类似的东西 Ayende Rahien贴?

现在的解决方法是为IFooRepo实现一个假,但我很好奇为什么会为这种情况生成一个坏图像并且有一个修复?System.Reflection.Emit是否有错误?或者我在自己的代码中遗漏了一些明显的东西?

编辑:为GetFoo()发布了错误的签名.将签名更正为GetFoo <T,F>(),正确地再现了问题.安装GDR后,此问题仍然存在.

编辑:似乎如果F上的约束包括类型参数T BadImageFormatException被引发.但是我把它更改为,where F : class, new()然后一切都按预期工作.

debugging castle-dynamicproxy moq reflection.emit

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

ASP.NET MVC 2,Ninject 2.2并没有为此对象定义的无参数构造函数

所以我花了一些时间与ASP.NET MVC 2(目前坚持使用Visual Studio 2008),现在已经开始使用Ninject 2.2及其MVC集成.我从以下位置下载了Ninject 2.2和Ninject.Web.Mvc:

https://github.com/downloads/ninject/ninject/Ninject-2.2.0.0-release-net-3.5.zip
https://github.com/downloads/ninject/ninject.web.mvc/Ninject.Web.Mvc2 -2.2.0.0-release-net-3.5.zip

并在我的MVC 2项目中引用它们.我的Global.asax.cs文件看起来像这样(几乎是Ninject.Web.Mvc自述文件所说的):

using System;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using Ninject.Web.Mvc;
using Ninject;

namespace Mvc2 {
    public class MvcApplication : NinjectHttpApplication {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }

        protected override void OnApplicationStarted() {
            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
        }

        protected override IKernel CreateKernel() { …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc ninject ninject.web ninject-2 asp.net-mvc-2

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

为什么某些 .Net 程序集无法通过 AppDomain 的 GetAssemblies() 方法获得?

我有一些代码循环遍历当前加载到在 ASP.NET 应用程序中运行的 AppDomain 中的类型。以下是我获取程序集的方法:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();
Run Code Online (Sandbox Code Playgroud)

当应用程序第一次启动时没有问题,并且我期望的所有类型都存在。但是,当我更新 Web.config 或终止 w3p.exe 进程(或该进程因任何原因被回收)时,只有一些我期望的类型可用。当我使用调试器单步执行时,我注意到私有搜索路径(我的应用程序的 bin 目录)中的某些程序集尚未加载。我假设所有程序集都在应用程序启动和重新启动时加载,无论是否立即需要它们。但在重新启动的情况下,除非这些程序集文件已更新,否则似乎不会发生这种情况。

我需要的是在启动时收集类型信息以供以后使用。但由于在重新启动期间类型不可用,因此当需要使用类型信息时会造成严重破坏。那么考虑到这一点,我该如何解决或解决这个缺陷呢?

.net c# reflection assemblies appdomain

3
推荐指数
1
解决办法
2311
查看次数

可以使Perforce客户端规范中映射的特定文件不可编辑吗?

例如,客户端规范的某些部分映射来自"已发布"库的文件.有没有办法让这些所谓的已发布地图强制为只读,即它们无法打开进行编辑?

例如(忽略[不可编辑]):

//Development/foo/... //client/foo/...
//Published/bar/1.0/... //client/bar/... [not editable]
//Published/qux/2.0/... //client/qux/... [not editable]
Run Code Online (Sandbox Code Playgroud)

换句话说,我想阻止文件被打开(例如,默认情况下被锁定),我想知道这是否可以在客户端规范级别强制执行.

如果没有,是否可以使用"已发布"的软件仓库对某些用户只读?

perforce perforce-client-spec

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