我正在创建自己的字典,但我无法实现TryGetValue函数.当找不到密钥时,我没有任何东西要分配给out参数,所以我保持原样.这会导致以下错误:"必须在控制离开当前方法之前将out参数'value'分配给"
所以,基本上,我需要一种方法来获取默认值(0,false或nullptr取决于类型).我的代码类似于以下内容:
class MyEmptyDictionary<K, V> : IDictionary<K, V>
{
bool IDictionary<K, V>.TryGetValue (K key, out V value)
{
return false;
}
....
}
Run Code Online (Sandbox Code Playgroud) 我正在重构大量的代码,我必须在一些函数中添加一个额外的参数,这些函数总是具有该对象成员的值.就像是
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object);
// used to be void MyFunc();
};
Run Code Online (Sandbox Code Playgroud)
现在,我真的很想读它
class MyClass
{
public:
CMyObject A,B;
void MyFunc(CMyObject &Object = A);
};
Run Code Online (Sandbox Code Playgroud)
但我不允许有一个非静态成员的默认参数.我已经读过这个类似的问题,这表明这是不可能的,但我想知道是否有任何合理的解决方法.原因是95%的时间将使用默认参数,因此使用默认参数将大大减少我必须更改的代码量.到目前为止,我最好的解决办法是这样的;
class MyClass
{
public:
CMyObject A,B;
void MyFunc(BOOL IsA = TRUE);
};
void MyClass::MyFunc(BOOL IsA)
{
CMyObject &Object = A;
if (!IsA)
Object = &B;
}
Run Code Online (Sandbox Code Playgroud)
这不是很优雅,但有没有更好的方法来做到这一点,我错过了?
编辑: FWIW,额外参数的原因是从相关对象外部化一些状态相关成员以帮助多线程.
引用MySQL INSERT手册 - 同样适用于UPDATE:
使用关键字DEFAULT将列显式设置为其默认值.这使得编写INSERT语句更容易,这些语句将值分配给除了几列之外的所有列,因为它使您能够避免编写不包含表中每列的值的不完整VALUES列表.否则,您必须写出与VALUES列表中每个值对应的列名列表.
所以简而言之,如果我写
INSERT INTO table1 (column1,column2) values ('value1',DEFAULT);
Run Code Online (Sandbox Code Playgroud)
将插入了将column2设置为其默认值的新行 - 无论它是什么.
但是,如果我在PHP中准备并执行语句:
$statement = $pdoObject->
prepare("INSERT INTO table1 (column1,column2) values (?,?)");
$statement->execute(array('value1','DEFAULT'));
Run Code Online (Sandbox Code Playgroud)
如果列能够存储文本值,则新行将包含"DEFAULT"作为其文本值.
现在我已经为PDO编写了一个抽象层(我需要它)并且考虑引入一个问题来解决这个问题
const DEFAULT_VALUE = "randomstring";
Run Code Online (Sandbox Code Playgroud)
所以我可以执行这样的语句:
$statement->execute(array('value1',mysql::DEFAULT_VALUE));
Run Code Online (Sandbox Code Playgroud)
然后在执行绑定的方法中,我将查看发送到绑定的值,如果某些值相等self::DEFAULT_VALUE,则相应地执行操作.
我很确定有更好的方法来做到这一点.还有其他人遇到类似情况吗?
我有一个问题反序列化一些XML; 由第三方提供的XML非常冗长,因此如果没有为特定元素设置值,它将提供并清空元素(例如<element1 />).
这是某些元素的问题,例如,那些用于存储整数的元素.我可以控制第三方,所以我可以让他们指定默认值(<myinteger>0</myinteger>)或者我可以让他们完全省略这些元素.这两个都应该避免这个问题.
但是,将来可能会出现这样的情况,即我们没有那么多控制权 - 在这种情况下,是否有一种方法可以通过装饰指定默认值?
[XmlElement("myinteger")=0???]
public int MyInteger
{
get
{
return myInteger;
}
set
{
myInteger= value;
}
}
Run Code Online (Sandbox Code Playgroud) c# serialization xml-serialization default-value xml-deserialization
我正在尝试编写一个Scala函数,它返回一个类型的默认值(0,0.0,false,'\ 0'等,对于值类型,null为引用类型).我想出了这个:
def defaultValue[U]: U = {
class Default[U] { var default: U = _ }
new Default[U].default
}
Run Code Online (Sandbox Code Playgroud)
虽然直接调用它的效果很好,但是当通过本身是通用的函数调用时,它甚至对值类型也返回null,如此REPL会话所示:
Welcome to Scala version 2.8.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.
scala> def defaultValue[U]: U = { class Default[U] {var default: U = _ }; new Default[U].default }
defaultValue: [U]U
scala> defaultValue[Boolean] // direct call works
res0: Boolean = false
scala> var res: Any = 0
res: …Run Code Online (Sandbox Code Playgroud) 我希望这不是一个愚蠢的问题.您可以为所有变量设置默认值,也可以为插入时设置函数.但是如果不需要插入字段并且您不允许空值,那么您在phpMyAdmin中看到的"空白"值是多少?在一个查询中它是作为空字符串等返回?
只是想弄清楚,我想查询所有记录,使得该记录中特定列的值不是"空"或空白或其他.
谢谢.
通常,我使用相同的功能设置.我想知道是否有一个方法,除了在路径中有一个新对象,实际上是函数的包装器,设置默认参数.例如:
paste()将它的sep论点设置为空间=" ",我厌倦了,sep=""一遍又一遍地写作.那么有没有办法用我选择的默认值"暂时"替换该功能?
paste(...,sep="")
Run Code Online (Sandbox Code Playgroud)
我可以通过包装来实现吗?我有时会注意到,有些软件包强制在全局环境中屏蔽其他同名函数.
理想情况下,我希望可以在项目基础上(load.r或其他一些此类工作流程起始点)设置项目
我正在使用DefaultValue属性来表示正确的PropertyGrid行为(它以粗体显示与默认值不同的值).现在,如果我想使用XmlSerializer在xml文件中对没有默认值的属性的条目来序列化显示的对象.
告诉XmlSerializer序列化这些仍然是最简单的方法是什么?
我需要它来支持"版本",所以当我稍后在代码中更改默认值时 - serialized属性获取它已序列化的值,而不是"最新"的值.我可以考虑以下事项:
PropertyGrid(使用自定义属性,因此将被忽略XmlSerializer);DefaultValue;XmlSeriazer因此不再包含对象DefaultValue.但是我有可能错过了一些秘密财产,它可以做到这一点而没有太大的痛苦= D.
这是我想要的一个例子:
private bool _allowNegative = false;
/// <summary>
/// Get or set if negative results are allowed
/// </summary>
[Category(CategoryAnalyse)]
[Admin]
[TypeConverter(typeof(ConverterBoolOnOff))]
//[DefaultValue(false)] *1
public bool AllowNegative
{
get { return _allowNegative; }
set
{
_allowNegative = value;
ConfigBase.OnConfigChanged();
}
}
//public void ResetAllowNegative() { _allowNegative = false; } *2
//public bool ShouldSerializeAllowNegative() { …Run Code Online (Sandbox Code Playgroud) 我正在使用JSON.NET作为我的主序列化程序.
这是我的模型,看起来我已经设置了一些JSONProperties和一个DefaultValue.
public class AssignmentContentItem
{
[JsonProperty("Id")]
public string Id { get; set; }
[JsonProperty("Qty")]
[DefaultValue(1)]
public int Quantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我序列化时List<AssignmentContentItem>,它做得很好:
private static JsonSerializerSettings s = new JsonSerializerSettings
{
DefaultValueHandling = DefaultValueHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore
};
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
[{"Id":"Q0"},{"Id":"Q4"},{"Id":"Q7"}]
Run Code Online (Sandbox Code Playgroud)
但是当我想反序列化这个jsonContent时,属性Qty始终为0并且未设置为默认值.我的意思是,当我反序列化jsonContent时,因为Quantity的DefaultValue应该是1而不是0.
public static List<AssignmentContentItem> DeserializeAssignmentContent(string jsonContent)
{
return JsonConvert.DeserializeObject<List<AssignmentContentItem>>(jsonContent, s);
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办