小编Hou*_*man的帖子

如何在用户设置中存储HashTable?

在.NET中,您可以选择哈希表作为用户设置的类型.但是,当我保存并以这种方式检索它时,它似乎根本没有保存它.

Hashtable t = new Hashtable();
t.Add(1,"Foo");
t.Add(2,"Bar");
Properties.Settings.Default.Setting = t;
Properties.Settings.Default.Save();

if(Properties.Settings.Default.Setting != null)
        foreach (DictionaryEntry entry in Properties.Settings.Default.Setting)
        {
            MessageBox.Show(entry.Key + " " + entry.Value);
        }
Run Code Online (Sandbox Code Playgroud)

当我在Visual Studio中清楚地选择该类型时,为什么它不会在用户设置中序列化它?我会理解,如果这是一个未列出的类型,如字典,但列出了Hashtable.我该如何解决这个问题?
这个顺序的简单性和效率对我来说是最重要的.

非常感谢,Kave


更新:

@Joao,非常感谢二元解决方案.我发现它很有趣,很干净.将其序列化为二进制文件的一个disadvavtage可能是您不能再手动更改usersetting文件中的任何内容.但我认为无论如何都会很少这样做,所以这是一个很好的解决方案.

我在考虑在用户范围内创建类型为字符串的"XMLSetting"字段的不同方法,并使用此代码将值存储和检索为序列化为哈希表的XMl文件.但我确信这不是最好的方法,有没有人知道在用户设置中将哈希表/字典序列化为xml的更好方法,除了我在下面做的事情?

if(string.IsNullOrEmpty(Properties.Settings.Default.XMLSetting))
            {
                Console.WriteLine("Usersettings is empty. Initializing XML file...");
                XmlDocument doc = new XmlDocument();
                XmlElement hashtable = doc.CreateElement("HashTable");
                doc.AppendChild(hashtable);

                GenerateValues(doc, hashtable, "1", "Foo");
                GenerateValues(doc, hashtable, "2", "Bar");

                Properties.Settings.Default.XMLSetting = doc.OuterXml;
                Properties.Settings.Default.Save();
            }
            else
            {
                Console.WriteLine("Retrieving existing user settings...");
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(Properties.Settings.Default.XMLSetting);

                Hashtable hashtable …
Run Code Online (Sandbox Code Playgroud)

.net settings hashtable

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

在Sudoku中解决裸体三重奏

我希望我更加关注Uni的数学课程.:)

如何为裸三元组实现这个数学公式?

Naked Triples
取三个单元格C = {c1,c2,c3}共享一个单位U.取三个数字N = {n1,n2,n3}.如果C中的每个单元都有候选ci⊆N那么我们就可以从U中的其他单元中删除所有的ni∈N.**

我有一个方法,取一个单位(例如一个Box,一行或一列)作为参数.该单元包含9个单元,因此我需要从框中一次比较3个单元的所有组合,或者将它们放入堆栈或集合中以进行进一步计算.

下一步将逐个采用这些3细胞组合,并将它们的候选物与3个数字进行比较.同样,这3个数字可以是从1到9的任何可能的组合.这就是我所需要的.

但是我该怎么做?我会得到多少组合?我是否为单元格获得3 x 9 = 27种组合,然后数字(N)相同?

你会如何在经典的C#循环中解决这个问题?没有Lambda表达,请我已经足够困惑了:)

代码: 为了在这里代表他们,我不得不缩短课程.

public class Cell : INotifyPropertyChanged
    {

public ObservableCollection<ObservableCollection<Candidate>> CandidateActual {...}

public int Id { ... }

//Position of the Cell inside a box if applicable
public int CellBoxPositionX { get; private set; }  
public int CellBoxPositionY { get; private set; }

//Position of the Cell inside the game board
public int CellBoardPositionX { get; private set; }
public int CellBoardPositionY { …
Run Code Online (Sandbox Code Playgroud)

.net c# math sudoku

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

Perforce:如何取消同步操作?

使用P4 Windows客户端时,可以通过按红色取消按钮取消长时间运行的同步操作.

我正在努力找出相应的命令行操作是什么?

非常感谢您的帮助,

perforce

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

DataGridTextColumn - 如何绑定IsReadonly?

在Silverlight 4中,DataGridTextColumn的IsReadOnly属性似乎不是依赖属性.因此我无法将其绑定到viewmodel上的属性.

似乎唯一的选择是使用DataTemplate,但即使在这里我也面临两个主要问题:

<sdk:DataGrid Style="{StaticResource DataGridStyle}" x:Name="call_dataGrid" ItemsSource="{Binding Calls}">
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTextColumn Header="Call Time" Binding="{Binding Path=CallTime}" />
                        <sdk:DataGridTemplateColumn Header="Call Date">
                            <sdk:DataGridTemplateColumn.CellEditingTemplate>
                                <DataTemplate>
                                    <TextBox Text="{Binding Path=CallDate}" IsReadOnly="{Binding Path=DataContext.IsInEditMode, ElementName=call_dataGrid, Converter={StaticResource NegationConverter}}"/>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellEditingTemplate>
                        </sdk:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)

我似乎无法编辑DataGridTextColumn的模板,而是必须使用DataGridTemplateColumn,如上所示.但是这会覆盖我之前在DataGridStyle中定义的所有样式.我的专栏甚至没有行标记,看起来与其他细胞完全不同.

第二个问题是,它仍然没有按预期工作.该模板中的文本框仍未设置为只读.我在这做错了什么?

非常感谢您对此的帮助,

更新

在下面有希望的回应之后我调整了代码但没有成功.

我已将DP的回调更改为以下内容

public class IsReadOnlyDpAttachable
    {
        public static void SetIsReadXOnly(DependencyObject obj, bool isReadOnly)
        {
            obj.SetValue(IsReadXOnlyProperty, isReadOnly);
        }

        public static bool GetIsReadXOnly(DependencyObject obj)
        {
            return (bool)obj.GetValue(IsReadXOnlyProperty);
        }

        public static readonly DependencyProperty IsReadXOnlyProperty =
            DependencyProperty.RegisterAttached("IsReadXOnly", typeof(bool), typeof(IsReadOnlyDpAttachable), new PropertyMetadata(false, Callback));

        private static void Callback(DependencyObject d, DependencyPropertyChangedEventArgs …
Run Code Online (Sandbox Code Playgroud)

silverlight silverlight-4.0

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

Datagrid:如何获取SelectedItem的CurrentCell?

在WPF数据网格的代码背后,如何从我的dataGrid.SelectedItem(在代码中)中获取currentCell?

非常感谢,

c# wpf datagrid

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

如何在powershell中循环直到成功?

%WINDIR%\system32\inetsrv\appcmd.exe set site /site.name:"WebRole_IN_0_CB" /[Path='/'].applicationPool:"ASP.NET v4.0" >>CBLog.log
powershell.exe -command Set-ExecutionPolicy Unrestricted
powershell.exe .\CheckIfSuccessful.ps1
Run Code Online (Sandbox Code Playgroud)

我想运行上面的脚本,如果 appcmd.exe 由于网站尚未启动和准备好而无法执行它,我会在 CBLog.log 文件中收到以下错误消息。

错误(消息:找不到标识符为“WebRole_IN_0_CB”的站点对象。)

在 CheckIfSuccessful.ps1 我想创建一个 Powershell 脚本来循环,它运行 appcmd 命令并再次检查错误。然后休眠 5 秒,然后重试,直到成功。

我将如何在 Powershell 中执行此操作?

高度赞赏,

更新:

好的,非常感谢 $lastexitcode 的提示,虽然它看起来很有希望。似乎我在 Powershell 中转换单引号时遇到问题:(以下是我初始 appcmd 命令的一部分)

/[Path='/'].applicationPool:"ASP.NET v4.0"
Run Code Online (Sandbox Code Playgroud)

我如何在powershell中引用它?我试图简化它,以便 powershell 减少它的麻烦,但现在看来我的命令是错误的,正如它现在所说的:

错误(消息:找不到标识符为“v4.0”的站点对象。)

 & $Env:WinDir\system32\inetsrv\appcmd.exe set site '/site.name:"WebRole_IN_0_CB"' "/[Path='/'].applicationPool:`"ASP.NET v4.0`"" >CBLog.log
if($lastexitcode -ne '0')
{
    while($lastexitcode -ne '0')
    {
        Start-Sleep -s 5
        & $Env:WinDir\system32\inetsrv\appcmd.exe set site '/site.name:"WebRole_IN_0_CB"' "/[Path='/'].applicationPool:`"ASP.NET v4.0`"" >CBLog.log
    }
}
Run Code Online (Sandbox Code Playgroud)

更新二: 我已经正确地逃脱了。但我仍然收到错误消息。如果我在创建该站点后单独运行 appcmd,日志文件就可以了。请问有什么建议吗?

iis powershell appcmd

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

如何忽略特定控件的默认样式?

我正在使用应用于我的应用程序中的所有扩展器的自定义样式.

<Style x:Key="{x:Type Expander}" TargetType="{x:Type Expander}">
</Style>
Run Code Online (Sandbox Code Playgroud)

在一个特定的视图中,我想使用标准的扩展器.我怎么能说它应该忽略自定义样式并使用内置的?

除非没有办法,我必须用键标记自定义样式,并将其应用于具有该键的所有其他扩展器.(因此,我试图实现的反过来)

我只是想知道是否有更好的方法来做到这一点.

wpf

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

PyCharm:如何运行syncdb和sql命令?

使用Django时,您可以像这样同步数据库:

python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

并检查创建的SQL如下:

python manage.py sql bookmarks
Run Code Online (Sandbox Code Playgroud)

我如何通过PyCharm IDE而不是终端进行上述操作?

谢谢,

django pycharm

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

类似于val()但是对于选择多个中的选定文本?

可能重复:
jQuery从下拉列表中获取所选文本

<select id="id_deals" name="deals" multiple="multiple">
  <option value="1">deal 2</option>
  <option value="2">deal 1</option>
</select>
Run Code Online (Sandbox Code Playgroud)

使用jquery,我可以获得所选项的值,如下所示:

var selected = $(e.target).val();

>> 2
Run Code Online (Sandbox Code Playgroud)

但令人惊讶的是,当我尝试获取实际选定的文本(例如交易1)时,它给了我两个条目:

var selected_text = $(e.target).text();

>> "\ndeal 2\ndeal 1\n"
Run Code Online (Sandbox Code Playgroud)

为什么这样,我怎么能得到所选条目的文本?

jquery

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

Django:如何在单元测试中隐藏 Traceback 以提高可读性?

我发现为一个简单的失败的单元测试获取如此多的细节有点令人恼火。除了实际定义的断言消息之外,是否可以抑制所有内容?

Creating test database for alias 'default'...
.F
======================================================================
FAIL: test_get_sales_item_for_company (my_app.tests.SalesItemModelTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/kave/projects/my/my_app/tests.py", line 61, in test_get_sales_item_for_company
    self.assertEqual(sales_items.count(), 1, 'Expected one sales item for this company, but got %s' % sales_items.count())
AssertionError: Expected one sales item for this company, but got 2

----------------------------------------------------------------------
Ran 2 tests in 0.313s

FAILED (failures=1)
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)

我觉得这有点不必要。我需要知道失败的测试名称(方法)和断言消息。真的不需要回溯..

Traceback (most recent call last):
  File "/home/kave/projects/my/my_app/tests.py", line 61, in test_get_sales_item_for_company
    self.assertEqual(sales_items.count(), 1, 'Expected one sales …
Run Code Online (Sandbox Code Playgroud)

django unit-testing

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