我确信之前已经提出过这个问题,但我仔细阅读了类似问题的搜索内容并没有得出答案.
我厌倦了检查Nullable是否有值.为什么我不能分配myNullable<int> yourAge到int myAge,如果得到一个例外 yourAge是空?此外,如果我们的任何一个年龄都为空,为什么我必须进行fxning检查以避免将'deafault'分配给fxning SqlParameter?我甚至不能做文明mySqlParm = myAge.HasValue ? myAge.Value : DBNull.Value.
可空类型的固定点是什么?我们仍然必须使用'-1'来表示pkId以避免可怕的Null.我们甚至不能添加我们自己的扩展menthods因为'等等'.
为什么甚至fxning根本没有参数?为什么我们不将所有日期存储为fxning varchar(10)?
我正在为我的MCPD学习,这个示例类在ADO.net实体框架示例中显示.我还没遇到过?在OrderDate和EmployeeID等财产中,有人可以向我解释它的作用或含义吗?
public class Order
{
public int OrderID { get; set; }
public string CustomerID { get; set; }
public int? EmployeeID { get; set; }
public DateTime? OrderDate { get; set; }
public DateTime? RequiredDate { get; set; }
public DateTime? ShippedDate { get; set; }
public int? ShipVia { get; set; }
public decimal? Freight { get; set; }
public string ShipName { get; set; }
public string ShipAddress { get; set; }
public string ShipCity { get; …Run Code Online (Sandbox Code Playgroud) 我使用nhibernate访问我的数据库,andromda生成我的映射文件.一切正常,只要我没有使用可空数据类型.我想要的是拥有一个类型为Nullables.NHibernate.NullableInt32Type的实体.我的数据库与"int NULL"(SQL Server)类型的列具有对应关系.相应的类也具有正确的数据类型(int?).但是当我尝试获取数据库的值时,我得到一个NHibernate.MappingException:
NHibernate.MappingException:为类型Namespace.SummaryAttribute指定的映射信息无效,请检查映射文件中是否存在属性类型不匹配----> System.InvalidCastException:Die angegebene Umwandlungistungültig.
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-mapping
xmlns="urn:nhibernate-mapping-2.2"
default-cascade="none">
<class
name="Namespace.SummaryAttribute, Core"
table="SUMMARY_ATTRIBUTE"
dynamic-insert="false"
dynamic-update="false"
lazy="true">
<id name="Id" type="Int64" unsaved-value="0">
<column name="ID" sql-type="NUMERIC(19,0)"/>
<generator class="native">
</generator>
</id>
<property name="ShortName" type="String">
<column name="SHORT_NAME" not-null="true" unique="false" sql-type="VARCHAR(255)"/>
</property>
<property name="LongName" type="String">
<column name="LONG_NAME" not-null="true" unique="false" sql-type="VARCHAR(255)"/>
</property>
<property name="Description" type="String">
<column name="DESCRIPTION" not-null="true" unique="false" sql-type="VARCHAR(255)"/>
</property>
<property name="IsVisible" type="Boolean">
<column name="IS_VISIBLE" not-null="true" unique="false" sql-type="BIT"/>
</property>
<property name="DecimalPlaces" type="Nullables.NHibernate.NullableInt32Type, Nullables.NHibernate">
<column name="DECIMAL_PLACES" not-null="false" unique="false" sql-type="INT"/>
</property>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
没有属性"DecimalPlaces"一切正常.即使我将属性更改为简单数据类型int. …
我试图为一个超酷的扩展IDictionary- GetValue如果没有设置默认值为null.这是我提出的代码(不起作用):
public static TValue GetValue<TKey, TValue> (this IDictionary<TKey,
TValue> dictionary, TKey key, TValue defaultValue = null)
{
TValue value;
return dictionary.TryGetValue(key, out value)
? value
: defaultValue;
}
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点nullables?(比如,不包括int等).
以下是我的代码:
class Phrase
{
public String Name { get; private set; }
public Head Head { get; private set; }
public Phrase? Complement { get; private set; }
public Phrase(String Name, Head Head, Phrase? Complement)
{
this.Name = Name;
this.Head = Head;
this.Complement = Complement;
}
}
Run Code Online (Sandbox Code Playgroud)
这导致编译时错误说明
"类型'短语'必须是不可为空的值类型,才能在泛型类型或方法'System.Nullable'中将其用作参数'T'
我正在试图做的是有一个可为空类变量Complement,并允许它在构造函数中进行设置.我该如何做到最好?
用户提供"从"和"到"月份以生成报告(例如,从1个月回到13个月;如果他们在2016年2月15日选择此项,则返回值为2015年1月1日, 2016年1月1日).
我想允许用户从"from"或"to"组合框中选择最远的后面或最近的月份.我只想用最远的时间作为"从"和最接近的时间作为"to"以避免他们的混淆(他们可以做任何看起来很自然的事情).
所以我从这段代码开始:
int fromMonths = Convert.ToInt32(comboBoxProduceUsageFrom.Text);
DateTime RptParamsNominalFromDate = ReportSchedulerConstsAndUtils.SubtractMonthsFrom(fromMonths, nextGenerateAndSendDate);
int toMonths = Convert.ToInt32(comboBoxProduceUsageTo.Text);
DateTime RptParamsNominalToDate = ReportSchedulerConstsAndUtils.SubtractMonthsFrom(toMonths, nextGenerateAndSendDate);
Run Code Online (Sandbox Code Playgroud)
..然后我想将"从"日期设置为最晚的时间,并将"到"设置为更接近时间.我第一次尝试这个:
DateTime RptParamsFromDate;
DateTime RptParamsToDate;
if (RptParamsNominalFromDate > RptParamsNominalToDate)
{
RptParamsFromDate = RptParamsNominalToDate;
RptParamsToDate = RptParamsNominalFromDate;
}
else if (RptParamsNominalToDate > RptParamsNominalFromDate)
{
RptParamsFromDate = RptParamsNominalFromDate;
RptParamsToDate = RptParamsNominalToDate;
}
Run Code Online (Sandbox Code Playgroud)
...但是失败了," 使用未分配的局部变量'RptParamsFromDate'"(和"RptParamsToDate "的错误相同).
所以我尝试给DateTimes一个值/非值,如下所示:
DateTime RptParamsFromDate = null;
DateTime RptParamsToDate = null;
Run Code Online (Sandbox Code Playgroud)
...但是这给了我," 无法将null转换为'System.DateTime',因为它是一个不可为空的值类型 "
所以我再次设置动作并尝试对DateTimes进行nullablizing:
DateTime? RptParamsFromDate = null;
DateTime? RptParamsToDate = null;
Run Code Online (Sandbox Code Playgroud)
...但后来我得到," 'System.Nullable'不包含'ToLongDateString'的定义,并且没有扩展方法'ToLongDateString'接受类型'System.Nullable'的第一个参数'(你是否错过了使用指令或汇编参考?) …
我正在编写一个检查输出是否为函数的函数,DBNull如果泛型类型可以为null则返回null.如果不是,它只是抛出错误.
更新:添加了所有建议
public T Get<T>(string key)
{
int ordinal = reader.GetOrdinal(key);
if (reader.IsDBNull(ordinal))
{
if (typeof(T).GetTypeInfo().IsValueType && Nullable.GetUnderlyingType(typeof(T)) == null) // isn't a nullable field
throw new InvalidCastException();
else return default(T);
}
return reader.GetFieldValue<T>(ordinal);
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定是否default(T)为每个可空字段返回null.如果现在有任何其他方法使它返回null?
我阅读了Nullable Structure并了解其中的大部分内容.但我不知道人们何时以及为何会使用它.
I am trying to make a class GameOption that will hold three (really four) values:
Name of Option as string
An option as T
A default value as Nullable< T >
This how looks my class:
public class GameOption<T> {
private T v;
private string n;
private T? def;
public string Name { get => this.n; }
public T Value { get => this.v; }
public GameOption(T o, string name, T? def) {
this.n = name;
this.v = o;
} …Run Code Online (Sandbox Code Playgroud) 我有and和IQueryable<int>and 在较早的处理阶段IQueryable<int?>使用a从中删除了空值Where()。我现在希望UNION()在两个可查询对象之间执行a ,但是因为一个是可空类型,而另一个则不能。
我该如何解决?
nullable ×10
c# ×8
generics ×2
.net ×1
andromda ×1
datetime ×1
iqueryable ×1
linq ×1
nhibernate ×1
structure ×1