相关疑难解决方法(0)

转换:(NewType)与Object作为NewType

可能重复:
使用CLR中的'as'关键字进行转换

这两个演员之间究竟有什么区别?

SomeClass sc = (SomeClass)SomeObject;
SomeClass sc2 = SomeObject as SomeClass;
Run Code Online (Sandbox Code Playgroud)

通常,它们都应该显式转换为指定的类型?

.net c#

85
推荐指数
5
解决办法
8123
查看次数

C#中用于铸造的最佳做法是什么?

键入铸造和检查哪种方法是最佳做法?

Employee e = o as Employee;
if(e != null)
{
 //DO stuff
}
Run Code Online (Sandbox Code Playgroud)

要么

if(o is Employee)
{
Employee e = (Employee) o;
 //DO stuff
}
Run Code Online (Sandbox Code Playgroud)

.net c#

13
推荐指数
2
解决办法
8038
查看次数

SignInManager.PasswordSignInAsync抛出空对象异常

AccountController.cs安排AccountController上课.Login该类的方法失败了.特别,

var result = await SignInManager.PasswordSignInAsync(
    model.Email, model.Password, model.RememberMe, shouldLockout: true);
Run Code Online (Sandbox Code Playgroud)

Login方法内投掷System.NullReferenceException.

我已经验证了model.Email,model.Password并且model.RememberMe不是空的.下一步是深入挖掘SignInManager,这是一个AccountController类型的对象ApplicationSignInManager.从上面一行调用的get访问器SignInManager

public ApplicationSignInManager SignInManager
{
    get
    {
        return _signInManager ??
            HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
    }
    // private set...
}
Run Code Online (Sandbox Code Playgroud)

我改写为

public ApplicationSignInManager SignInManager
{
    get
    {
        var c = HttpContext.GetOwinContext();
        var m = c.Get<ApplicationSignInManager>();
        return _signInManager ?? m;
    }
    // private set...
}
Run Code Online (Sandbox Code Playgroud)

调试并确保get访问者没有返回 …

c# asp.net-mvc nullreferenceexception owin asp.net-mvc-5

12
推荐指数
2
解决办法
7367
查看次数

处理DateTime DBNull

我已经在SO上看过很多很多这样的版本,但是它们似乎都不能满足我的需求.

我的数据来自供应商数据库,该数据库允许DateTime字段为null.首先,我将数据拉入DataTable.

using (SqlCommand cmd = new SqlCommand(sb.ToString(), conn))
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
    da.Fill(dt);
}
Run Code Online (Sandbox Code Playgroud)

我正在将DataTable转换为List <>进行处理.

var equipment = from i in dt.AsEnumerable()
    select new Equipment()
    {
        Id = i.Field<string>("ID"),
        BeginDate = i.Field<DateTime>("BeginDate"),
        EndDate = i.Field<DateTime>("EndDate"),
        EstimatedLife = i.Field<double>("EstimatedLife")
    }
Run Code Online (Sandbox Code Playgroud)

那么,在这个实例中如何检查DBNull?我试着写一个方法.

    public DateTime CheckDBNull(object dateTime)
    {
        if (dateTime == DBNull.Value)
            return DateTime.MinValue;
        else
            return (DateTime)dateTime;
    }
Run Code Online (Sandbox Code Playgroud)

c# datetime dbnull

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

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

转换 - 在C#中"(myObject)something"和"some as AsObject"之间的区别是什么?

我已经遇到过这种情况并且感到困惑.

Cat c = new Cat("Fluffy");
return (Animal)c;

Cat c = new Cat("Fluffy");
return c as Animal;
Run Code Online (Sandbox Code Playgroud)

这两种语法都存在的原因是什么?

c#

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

as和cast之间的比较

可能重复:
直接投射vs'as'运算符?

任何人都可以对as和cast进行比较?

.net c#

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

"对象类型"和"((类型)对象)"之间有什么区别?

可能重复:
直接投射vs'as'运算符?
使用CLR中的'as'关键字进行转换

object myObject = "Hello world.";
var myString = myObject as string;
Run Code Online (Sandbox Code Playgroud)
object myObject = "Hello world.";
var myString = (string)myObject;
Run Code Online (Sandbox Code Playgroud)

我已经看到两种方式都进行了类型转换.有什么不同?

c# types casting object strong-typing

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

什么在演员,是不同的

这可能是一个微不足道的问题,我已经看到了Cast的几种不同变体.

  • 有什么不同?
  • 一个比另一个好(性能)?
  • 这只是一个偏好问题,代码易读性?

示例一:

command.ExecuteScalar() as string;
Run Code Online (Sandbox Code Playgroud)

示例二:

(string)command.ExecuteScalar();
Run Code Online (Sandbox Code Playgroud)

两者都会产生ExecuteScalar()不同的影响,所以问题是与数据库交互时是否比另一个更理想?

c#

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

C#中的IS运算符需要

在C#中,有一个is运算符用于检查对象是否与某种类型兼容.此运算符尝试将对象转换为某种类型,如果转换成功则返回true(或者false如果转换失败).

来自Jeffrey Richter CLR via C#:

is运算符检查对象是否与给定类型兼容,并且评估结果为布尔值:true或false.

if (o is Employee) 
{
    Employee e = (Employee) o;
    // Use e within the remainder of the 'if' statement.
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,CLR实际上是两次检查对象的类型:is运算符首先检查o是否与Employee类型兼容.如果是,则在if语句中,CLR再次验证o在执行强制转换时o引用Employee.CLR的类型检查提高了安全性,但肯定会带来性能成本,因为CLR必须确定变量(o)引用的对象的实际类型,然后CLR必须遍历继承层次结构,检查每个基类型针对指定的类型(Employee).

另外,从同一本书:

Employee e = o as Employee;
if (e != null) 
{
    // Use e within the 'if' statement.
}
Run Code Online (Sandbox Code Playgroud)

在此代码中,CLR检查o是否与Employee类型兼容,如果是,则返回对同一对象的非null引用.如果o与Employee类型不兼容,则as运算符返回null.请注意,as运算符使CLR只验证对象的类型一次.if语句只检查e是否为null; 可以比验证对象的类型更快地执行此检查.

所以,我的问题是:为什么我们需要is运营商?当is操作员更优选的情况下是哪种情况as.

.net c# casting

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