我正在编写一个应用程序,它接收用户数据并将其存储在本地以供日后使用.应用程序将经常启动和停止,我想在应用程序启动/结束时保存/加载数据.
如果我使用平面文件,那将是相当简单的,因为数据并不真正需要保护(它只会存储在这台PC上).我相信的选择因此是:
平面文件需要更多的维护工作(没有类似于XML的内置类),但是之前我没有使用过XML,而且对于这个相对简单的任务来说,SQL似乎有些过分.
还有其他值得探索的途径吗?如果没有,哪一个是最好的解决方案?
编辑:要为问题添加更多数据,基本上我唯一想存储的是一个看起来像这样的字典
Dictionary<string, List<Account>>
Run Code Online (Sandbox Code Playgroud)
其中Account是另一种自定义类型.
我会将dict序列化为xmlroot,然后将Account类型作为属性吗?
更新2:
所以可以序列化字典.使它变得复杂的是这个dict的值是泛型本身,它是Account类型的复杂数据结构的列表.每个帐户都相当简单,它只是一堆属性.
我的理解是,这里的目标是尝试最终得到:
<Username1>
<Account1>
<Data1>data1</Data1>
<Data2>data2</Data2>
</Account1>
</Username1>
<Username2>
<Account1>
<Data1>data1</Data1>
<Data2>data2</Data2>
</Account1>
<Account2>
<Data1>data1</Data1>
<Data2>data2</Data2>
</Account2>
</Username2>
Run Code Online (Sandbox Code Playgroud)
你可以看到heirachy是
从a获取这个布局Dictionary<Username, List<Account>>是棘手的一点,也是这个问题的本质.
这里有很多关于序列化的"如何"回应,这是我的错,因为我没有在早期更清楚,但现在我正在寻找一个明确的解决方案.
我可以使用这个来改变网格的宽度/高度,所以当我使用(Grid.RenderTransform).TranslateTransform.X时,为什么它不会起作用:
<Window.Triggers>
<EventTrigger RoutedEvent="Button.Click" SourceName="button">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetProperty="(Grid.RenderTransform).(TranslateTransform.X)"
From="0" To="200" Storyboard.TargetName="grid" Duration="0:0:2"
/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
Run Code Online (Sandbox Code Playgroud)
应用程序加载等,但单击按钮时没有任何反应.
这是我网格的XAML:
<Grid x:Name="grid" Height="714" Canvas.Left="240" Canvas.Top="8" Width="360" RenderTransformOrigin="0.5,0.5">
<Grid.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="Black" Offset="0"/>
<GradientStop Color="White" Offset="1"/>
</LinearGradientBrush>
</Grid.Background>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
</Grid>
Run Code Online (Sandbox Code Playgroud)
请注意,我尝试了许多不同的Canvas.Left值,但无济于事.
我想创建一个使用电子表格中的数据的表单,以便它是动态的。是否有可能做到这一点?我一直无法找到任何描述方法或任何示例的地方。
似乎所有可能的是从表单填充电子表格,我也会使用它,但它不是这里的主要关注点。
我要做的是为我的StreamWriter实例编写一个专用方法,而不是在程序中的随机点上使用它.这会对调用类的位置进行本地化,因为当前的方法存在一些错误.
这就是我现在所拥有的:
public static void Write(string[] stringsToWrite) {
writer = new StreamWriter(stream);
writer.Write("hello");
foreach (string stringToWrite in stringsToWrite) {
writer.Write(" " + stringToWrite + " ");
}
writer.Flush();
}
Run Code Online (Sandbox Code Playgroud)
注意:stream是TcpClient的一个实例
有了这个我能够传递一个变量数组来写,但我不能使用与现有方法相同的方法调用:
writer.WriteLine("hello {0} {1} {2}", variable1, variable2, variable 3);
writer.Flush();
Run Code Online (Sandbox Code Playgroud)
如果我能够将x个变量传递给方法并且循环以这种方式编写每个变量,那将是很好的,但.NET中的可选参数直到v4.0仍然处于测试阶段才会到达.
有任何想法吗?
我有一个非静态类,其中我有几个属性,即serverURL,serverPort等,并且该类有一个构造函数.构造函数接受参数,然后用它来"设置"属性,初始化它们.这是代码:
public Server(string newServerAddress, int newServerPort) {
serverAddress = newServerAddress;
serverPort = newServerPort;
}
public string serverAddress {
get {
return serverAddress;
}
set {
serverAddress = value;
}
}
public int serverPort {
get {
return serverPort;
}
set {
serverPort = value;
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这给了我一个堆栈溢出错误,我不知道为什么.以下是用于调用它的代码:
Server test = new Server("server.url.here",8080);
Run Code Online (Sandbox Code Playgroud)
这段代码显然是由一个类绑定的,但我把它留在了这里.这是一个业余的问题,我以前做过这样的事情,但我对发生的事情感到很困惑,当我在visual studio中尝试调试它时,它告诉我它无法调试它,大概是因为它正在使用堆栈进行调试.
我有以下SQL:
select Username,
COUNT(DISTINCT Message) as "Count",
AVG(WordCount) as "Average",
RAND(Message) //Essentially what I want to do
from Messages
group by Username
order by "Count" desc
Run Code Online (Sandbox Code Playgroud)
我的两个聚合函数列为Count和Average,这很明显.我想要做的是从"消息"列中返回每个分组的随机行.
我在Linq2SQL中编写了这个查询,但它不支持随机数.
我想我需要创建一个自定义聚合函数,但它们看起来非常过分,我想知道在尝试之前是否有更简单的方法.我尝试了一个CLR聚合函数,但由于它们的dll性质,数据库在实例之间不会那么容易移植.
我也知道在SQL中使用每行随机数也有点冗长,但我找不到通过查询在我的组中使用它们的方法.
我已经看到了Marc Gravell关于随机行的想法: 从Linq到Sql的随机行,但是他的解决方案拉入了我不想做的每一行; 只有分组(数量级更小)
我正在为Resharper编写一个导航插件,我的情况是我有一个IDeclaredElement我从中获得的列表
var declaredElements = context.GetData(DataConstants.DECLARED_ELEMENTS)
Run Code Online (Sandbox Code Playgroud)
此元素是用户将鼠标光标放在其上的元素.
我想做的是获取IDeclaredType声明的元素,包括它可能具有的任何类型参数,如果它是泛型类型的话.
当涉及到类型系统时,resharper SDK文档很轻松,并没有真正解释各种类型之间的关系.
我已经在其他插件周围寻找试图找到这个的例子,但是空洞了.我已经检查了每个Util和Extension类,看看是否有某个方法可以提供我想要的东西,但是没有.
关于我发现的唯一的事情是:
declaredElements.First().GetSuperTypes()
Run Code Online (Sandbox Code Playgroud)
返回类型层次结构,不包括当前类型.有用,但不是我想要的.
有没有人有这个API的经验或了解它是如何工作的?我喜欢一个解释类型之间关系的答案.
我对它的理解,简而言之:
(IDeclaredElement, IDeclaredType) 似乎是指物理代码元素.(ITypeElement, IDeclaredElement),也许它指的是AST元素.我很喜欢这方面的一些澄清.
关于我的上一个问题(是否有一种更简单的方法将一组变量作为数组传递)
我试图将字符串变量传递给写入流的方法,而不是在每个单独的方法中进行写入.
使用params关键字显然是一种解决方案,但是通过使用它我相信我不能做这样的事情:
Write("hello {0}",var1);
Run Code Online (Sandbox Code Playgroud)
这没有使代码相当混乱.有没有办法强制这个功能到我自己的方法?
c# ×5
.net ×3
arguments ×2
constructor ×1
data-storage ×1
google-docs ×1
google-forms ×1
linq-to-sql ×1
parameters ×1
params ×1
properties ×1
sql ×1
sql-server ×1
wpf ×1
xaml ×1
xml ×1