我有一个应用程序,它支持某些设备的多种类型和版本.它可以连接到这些设备并检索各种信息.
根据设备的类型,我有(除其他外)一个可以包含各种属性的类.某些属性对所有设备都是通用的,有些属性对于特定设备是唯一的.
此数据序列化为xml.
实现一个类的首选方法是什么,它将支持这些设备的未来版本中的未来属性,以及向后兼容以前的应用程序版本?
我可以想到几种方法,但我发现它们都不是很好:
value对象)XmlInclude或自定义序列化来反序列化派生类,不与以前的xml架构向后兼容(虽然通过实现自定义序列化我可以跳过未知属性?),需要强制转换来访问派生类中的属性.顺便说一句,我正在使用C#.
我在Visual Studio 2008中逐步调试多线程.NET应用程序时遇到问题.
随着每个阶梯线,Visual Studio变得越来越慢(跳转到下一行需要越来越多的时间)并且通常在几行之后挂起(我得到"Visual Studio忙"气球提示),我需要停止调试.
我怀疑问题是由于应用程序连接了几个TCP/IP客户端,这意味着每次我创建一个断点,他的网络缓冲区都会被填满,直到我继续我的应用程序.每当我使用F10步骤到下一行代码时,Visual Studio会很快唤醒所有其他线程以便它们处理输入数据.
有没有人有这些问题的经验,以及如何避免这些问题的建议?
我有不可变的对象,我希望延迟计算其哈希码。我已经实施了
private bool _HasHashCode = false;
private int _HashCode;
public override int GetHashCode()
{
if (_HasHashCode)
return _HashCode;
long hashCode;
unchecked
{
hashCode = Digits;
hashCode = (hashCode*397) ^ XI;
hashCode = (hashCode*397) ^ YI;
hashCode = (int) ( hashCode % Int32.MaxValue);
}
// is it possible that these two write instructions
// get reordered on a certain .NET/CPU architecture
// combination:
_HashCode = (int)hashCode;
_HasHashCode = true;
return _HashCode;
}
Run Code Online (Sandbox Code Playgroud)
我的推理是,32 位 _HashCode 成员是 32 位,写入它是原子的,因此即使由于设置 _HasHashCode 属性时的竞争条件而运行两次计算也没关系 …
我有以下问题:在我的数字添加一个字符串之后,该点之后的第二个数字就像这样消失了
var needed_product = sets * (2 * price_bananas) +
sets * (4 * price_eggs) +
sets * (0.2 * price_berries);
var difference = Math.Abs(needed_product - amount_cash);
if (amount_cash>=needed_product)
{
Console.Write("Ivancho has enough money - it would cost " + "{0:F2}",
needed_product + "lv.");
}
Run Code Online (Sandbox Code Playgroud)
输出是37,4,它应该是37,40,逗号后面还有一位数.我该如何解决这个问题?当我打印它而不添加最后一个字符串时,整数的输出是正确的.
我正在使用GCC。我在Flash中通过.ld链接器文件创建了一个SECTION,我在其中放置了一些数据(704字节),并带有指令__attribute__((section...
Data似乎在Flash中,但是如果我const在声明数据时不使用关键字,则会在RAM中分配相同的空间。
如果我不使用constRAM,则不会使用-但我注意到增加了对Flash的使用,因为它被分配了两次!
链接器文件:
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 14K
USER_DATA_FLASH (rx) : ORIGIN = 0x8003800, LENGTH = 2K
}
SECTIONS
{ /* placing my named section at given address: */
.my_block 0x8003800 :
{
KEEP(*(.UserDataSector))
} > USER_DATA_FLASH
}
Run Code Online (Sandbox Code Playgroud)
数组声明具有初始化程序:
mytab_type __attribute__((section (".UserDataSector "))) progr16[16]=
{
{ {LIST1,LIST2....
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我没有使用const。假设这progr16被强制放在闪存中,并且如果在调试过程中我使用内存浏览器检查的话,它看起来确实在那里。但它似乎也占用RAM
FLASH RAM
text data bss dec
9268 772 1948 11988
Run Code Online (Sandbox Code Playgroud)
如果我添加const关键字:
FLASH RAM
text data bss …Run Code Online (Sandbox Code Playgroud) 我试图从奖金表中检索10个最大的数字.
但我收到此错误消息:
Incorrect syntax near 'LIMIT'
Run Code Online (Sandbox Code Playgroud)
我的代码:
SELECT cust_nr, period1_bonus FROM bonus ORDER BY period1_bonus DESC LIMIT 10
Run Code Online (Sandbox Code Playgroud) 给定一组字符串(大集合)和输入字符串,您需要有效地找到输入字符串的所有字符.您将使用什么数据结构.使用它,你会如何找到字谜?
我想到的是这些:
使用地图
a)消除所有字母多于/少于输入的字母.
b)将输入字符放在地图中
c)遍历每个字符串的地图,看看是否所有字母都带有计数.
使用尝试
a)将所有具有正确字符数的字符串放入trie中.
b)遍历每个分支,如果输入中包含字母,则更深入.
c)如果叶子到达这个词是一个字谜
有人能找到更好的解决方案吗?
您在上述方法中发现了哪些问题?
我有一个方法接受一个简单的类对象,并构建一个API调用中使用的URL.我希望这个方法能够处理/接受相似但具有不同属性的不同类类型.
public class ClientData
{
public string Name {get; set;}
public string Email {get; set;}
...
}
public class PaymentData
{
public decimal PaymentAmount {get; set;}
public string Description {get; set;}
...
}
Run Code Online (Sandbox Code Playgroud)
以下是两个示例方法.如你所见,它们非常相似.最好是将这些实现为接受不同参数的不同方法,还是可以编写一个可以处理参数对象差异的方法?
public string BuildApiCall(ClientData clientDataObject)
{
StringBuilder sb = new StringBuilder();
sb.Append("http://mytestapi.com/");
sb.append("name=" + clientDataObject.Name);
sb.append("email=" + clientDataObject.Email);
return sb.ToString();
}
public string BuildApiCall(PaymentData paymentDataObject)
{
StringBuilder sb = new StringBuilder();
sb.Append("http://mytestapi.com/");
sb.append("payment=" + paymentDataObject.PaymentAmount );
sb.append("description=" + paymentDataObject.Description );
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud) 这是一个简单的问题。如果 Newtonsoft.Json.dll 不在程序文件夹中,我就无法运行我的程序。为什么这个?我尝试添加引用,将文件添加到项目根目录,添加到资源文件夹,但没有任何效果。如何在程序文件夹中没有Newtonsoft.Json.dll的情况下运行程序?我正在 Windows 窗体应用程序中进行开发。
问题解决了,感谢spender给我介绍了ILMerge,这是一个非常好的NuGet包,可以将第三方dll组合成一个可执行的二进制文件。对于想要制作独立应用程序的人,只需使用 ILMerge。快速、简单且非常有用。拜拜!
我很抱歉标题不好,但除了“我不明白这段代码”之外,我没有想到更好的东西。请随时提出修改建议。
我正在阅读这段代码。我从未见过这样的 C 函数:
static void
VL_XCAT(_vl_vlad_encode_, SFX)
(TYPE * enc,
TYPE const * means, vl_size dimension, vl_size numClusters,
TYPE const * data, vl_size numData,
TYPE const * assignments,
int flags)
{
// function body
}
Run Code Online (Sandbox Code Playgroud)
特别是我对(_vl_vlad_encode_, SFX). 据了解,我见过的所有函数头都只有一对“圆括号”(函数的参数),而这里有两对。
第一个是什么意思?我认为这是与以后的调用_vl_vlad_encode_f和_vl_vlad_encode_d等不出现其他地方在库中的代码,但我不明白它们是如何连接的。