|
Currently, I do not like Tuples because they remove so much information (what's Item1 ?). But with these new Value Tuples, things are changing.
Your example above is a typical textbook example, where I do not see the full power of Value Tuples. In my opinion, their major advantages are with more functional styles of programming, e.g. with Linq.
|
|
|
|
|
Thanks, Bernhard; exactly the type of response I hoped to get.Bernhard Hiller wrote: Your example above is a typical textbook example, where I do not see the full power of Value Tuples. Yes, the example is simple, by design.Bernhard Hiller wrote: ... their major advantages are with more functional styles of programming, e.g. with Linq. I think we all might benefit from a better example illustrating this. I guess you are referring to using Linq to iterate-over or transform some IEnumerable collection of ValueTuples ?
«Beauty is in the eye of the beholder, and it may be necessary from time to time to give a stupid or misinformed beholder a black eye.» Miss Piggy
|
|
|
|
|
I can possibly see them being useful internally within a single project. But for shared code, a traditional class or struct would still be the better option.
Code, code and more code.: Exploring Tuples as a Library Author[^]
C# 7: Dynamic types and Reflection cannot access Tuple fields by name[^]
C# 7 ValueTuple types and their limitations | Joseph Woodward, Software Developer[^]
NB: Your example won't compile. You're missing the types for the middle and last constructor arguments, and the FullName property doesn't have a setter.
public Name(string first = null, string middle = null, string last = null) { ... }
...
public (string first, string middle, string last) FullName
{
get
{
return (first: FirstName, middle: MiddleName, last: LastName);
}
set
{
FirstName = value.first;
MiddleName = value.middle;
LastName = value.last;
}
}
You'd probably also want to declare a deconstructor on the class:
public void Deconstruct(out string first, out string middle, out string last)
{
first = FirstName;
middle = MiddleName;
last = LastName;
}
That would let you pick out parts of the class:
var (_, _, lastname) = nametest2;
c sharp7 deconstruction demystified · Surfing the code[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Thanks, Richard; that's even more than the type of response I hoped to get !
Corrected those code errors you spotted.Richard Deeming wrote: I can possibly see them being useful internally within a single project. But for shared code, a traditional class or struct would still be the better option. I can't really visualize how ValueTuples could be used in shared code. Perhaps studying the links you posted will enable me to understand that more clearly.
«Beauty is in the eye of the beholder, and it may be necessary from time to time to give a stupid or misinformed beholder a black eye.» Miss Piggy
|
|
|
|
|
I find that when I "try to reduce my typing" (too soon), the design of whatever I'm building starts to suffer.
My mantra these days: "granularity" (in which case, "more" is better).
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Hi,
I have a string variable which the value is html code.
I like to check to see if certain word (in this case EEST) exist in the first element as you can see in the sample. Then I like to remove that element and its content from the string.
<p class="myclass">Some text here, 26 APRIL 2017 AT 9:00 AM EEST. some other content here as well></p>
<p>much other elements here as well</p>
then the output becomes:
<p>much other elements here as well</p>
I was wondering, how I can do such task.
Thank you.
|
|
|
|
|
Try a regex:
public static Regex regex = new Regex(
"\\<p\\sclass=\"myclass\"\\>.*?\\sEEST.*?\\>\\</p\\>",
RegexOptions.IgnoreCase
| RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace
| RegexOptions.Compiled
); Then just use Replace:
string result = regex.Replace(inputText,"");
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
You are amazing! Thanks!
|
|
|
|
|
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hi, I am using Windows media player in my project, if I call media player from my main form its playing, I have written code that when I click Wmp it goes to main form but when I do this it is showing "Attempted to read or write protected memory. This is often an indication that other memory is Corrupt". Can anyone provide solution for this, Thanks in advance .
Mainform code:
Frmads frm=new frmads(this);
Frm.show();
This.hide();
Ads Form code:
If(e.newstate = =2)
{
Frmmain.Activate();
Frmmain.show();
This.close();
}
|
|
|
|
|
Please do not post the same question in multiple places - it wastes peoples time and effort.
You already have this in QA so posting here just duplicates work.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Hello
I have a small problem. I have this in my XAML file
<Image
x:Name="MyPic"
HorizontalAlignment="Left"
Source="..\imgs\xxxx.jpg">
Now I want to change the picture during runtime. I found some examples how to do that but I don't want to load the picture from the hard disk. When I give my programm away I don't want to have put the image files to it too. It would be much nicer if the pictures would be inside my programm as resource and if I could exchange them during runtime from the resource. I tried to add the picture to the resource and then load from there:
m_Img = Properties.Resources.ResourceManager.GetObject("MyPicture") as Image;
MyPic.Source = m_Img.Source;
But m_Img is null
What am I doing wrong?
|
|
|
|
|
Might be a good thing if you describe exactly how you bind/put the images to/in the Resource bag ... and/or show relevant code.
See if this is useful: [^].
«Beauty is in the eye of the beholder, and it may be necessary from time to time to give a stupid or misinformed beholder a black eye.» Miss Piggy
|
|
|
|
|
Hi,
I have a weird problem, hopefully someone can shine a light on it?
The user gets a list of defects on a product from the database. I put them in a List<drumdefect>, like so:
while (rdr.Read())
{
DrumDefect defect = new DrumDefect()
{
AVI_Defect = new AVIDefect()
{
SequenceNumber = (rdr["AVIProdUDefectSeqNr"] != DBNull.Value) ? int.Parse(rdr["AVIProdUDefectSeqNr"].ToString()) : (rdr["MVIProdUDefectSeqNr"] != DBNull.Value) ? int.Parse(rdr["MVIProdUDefectSeqNr"].ToString()) : -1,
Code = (rdr["AVIProdUDefectCode"] == DBNull.Value) ? "# 0" : rdr["AVIProdUDefectCode"].ToString(),
Name = (rdr["AVIProdUDefectName"] == DBNull.Value) ? "NODEFECT" : rdr["AVIProdUDefectName"].ToString(),
Severity = (rdr["AVISeverityLevelID"] == DBNull.Value) ? DefectSeverity.NODEFECT : (DefectSeverity)int.Parse(rdr["AVISeverityLevelID"].ToString())
},
MVI_Defect = new Defect()
{
Code = (rdr["MVIProdUDefectCode"] == DBNull.Value) ? "# 0" : rdr["MVIProdUDefectCode"].ToString(),
Name = (rdr["MVIProdUDefectName"] == DBNull.Value) ? "NODEFECT" : rdr["MVIProdUDefectName"].ToString(),
Severity = (rdr["MVISeverityLevelID"] == DBNull.Value) ? DefectSeverity.NODEFECT : (DefectSeverity)int.Parse(rdr["MVISeverityLevelID"].ToString())
},
FVI_Defect = new Defect()
};
list.Add(defect);
}
Then I import them in a datagridview like so:
_SelectedDrum.Defects = database.GetList();
dataGridViewDefects.DataSource = null;
dataGridViewDefects.DataSource = _SelectedDrum.Defects;
dataGridViewDefects.Refresh();
The user can add a defect, so I add one like this:
DrumDefect defect = new DrumDefect()
{
AVI_Defect = new AVIDefect()
{
SequenceNumber = -1,
Code = "# 0",
Name = "NODEFECT",
Severity = DefectSeverity.NODEFECT
},
MVI_Defect = new Defect()
{
Code = "# 0",
Name = "NODEFECT",
Severity = DefectSeverity.NODEFECT
},
FVI_Defect = new Defect()
};
_SelectedDrum.Defects.Add(defect);
it all works fine, except when the database list is empty, the user adds a defect, and you click with the mouse in the datagridview (but only at the click), then the application crashes with this error:
System.IndexOutOfRangeException occurred
Message=Index -1 does not have a value.
Source=System.Windows.Forms
StackTrace:
at System.Windows.Forms.CurrencyManager.get_Item(Int32 index)
at System.Windows.Forms.CurrencyManager.get_Current()
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.OnRowEnter(DataGridViewCellEventArgs e)
at System.Windows.Forms.DataGridView.OnRowEnter(DataGridViewCell& dataGridViewCell, Int32 columnIndex, Int32 rowIndex, Boolean canCreateNewRow, Boolean validationFailureOccurred)
at System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
at System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
at System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
at System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.DataGridView.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Xerox.ODB2.twister.Program.Main() in c:\Users\y952hrym\Documents\CS_Projects_2\Twister\Twister\Twister.View\Program.cs:line 18
InnerException:
Thanks
modified 15-Jun-17 4:22am.
|
|
|
|
|
Do you have an event handler method set up for the click event?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
yes i have, but it does not reach the breakpoint.
private void dataGridViewDefects_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
}
in fact i have the following event procedures, but none of them is the source of the problem (breakpoint not hit when the error occures)
this.dataGridViewDefects.CellMouseClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridViewDefects_CellMouseClick);
this.dataGridViewDefects.CellMouseDoubleClick += new System.Windows.Forms.DataGridViewCellMouseEventHandler(this.dataGridViewDefects_CellMouseDoubleClick);
this.dataGridViewDefects.RowEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridViewDefects_RowEnter);
this.dataGridViewDefects.Enter += new System.EventHandler(this.dataGridViewDefects_Enter);
this.dataGridViewDefects.KeyDown += new System.Windows.Forms.KeyEventHandler(this.dataGridViewDefects_KeyDown);
this.dataGridViewDefects.Leave += new System.EventHandler(this.dataGridViewDefects_Leave);
|
|
|
|
|
Are any of the methods in the stack trace yours, or are they all framework?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
they are all framework, except maybe OnRowEnter, but the breakpoint i set did not get hit.
private void dataGridViewDefects_RowEnter(object sender, DataGridViewCellEventArgs e)
{
try
{
if (_SelectedDrum != null && e.RowIndex > -1) _SelectedDefect = _SelectedDrum.Defects[e.RowIndex];
}
catch (Exception exc)
{
Logger.LogException(exc);
}
}
the application crashes in the line:
Application.Run(new TwisterForm());
modified 15-Jun-17 4:51am.
|
|
|
|
|
Can you try enabling all exceptions?
From the menu, "Debug...Exceptions", and tick everything in the "Thrown" column. That way, even if an exception is being handled, the code should break (and the reference sources should help you locate why).
Trouble is that if I do a "minimum setup" to mimic your problem, I get no exception:
public class MyObject
{
public string Text { get; set; }
public int Value { get; set; }
}
private void button1_Click(object sender, EventArgs e)
{
MyObject mo = new MyObject();
mo.Text = "hello";
mo.Value = 666;
myList.Add(mo);
myDataGridView.Refresh();
}
private List<MyObject> myList = new List<MyObject>();
private void MyButton_Click(object sender, EventArgs e)
{
myDataGridView.DataSource = null;
myList = new List<MyObject>();
myDataGridView.DataSource = myList;
myDataGridView.Refresh(); So I can't get any additional info to work from.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
That looks like a bug in the framework.
According to this post from 2011[^], you should be able to work around it by creating a new list if the existing list is empty when you add the new item:
if (_SelectedDrum.Defects.Count == 0)
{
_SelectedDrum.Defects = new List<DrumDefect> { defect };
dataGridViewDefects.DataSource = null;
dataGridViewDefects.DataSource = _SelectedDrum.Defects;
dataGridViewDefects.Refresh();
}
else
{
_SelectedDrum.Defects.Add(defect);
}
Or there's this StackOverflow answer[^] which suggests using a BindingList<T> instead of a List<T> .
If you can reproduce the problem with a simple example application, it might be worth reporting the bug on Connect[^] to see if it can be fixed in a future version.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
very interesting, thanks a lot!
|
|
|
|
|
When modifying the contents of "list controls", you have to be sensitive to where the "selected index" and "selected item" wind up.
Often, it needs to be "reset" to an existing item (if there are any) from "-1" (after some operation); which signifies no items OR "nothing selected".
(In WPF, for example, the "selected event" will fire during control initializing; which can foul up your app if you don't anticipate it).
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
i am assign to create a application that allow video and text chat both but the problem is how it can be done? this application should be window form , secure , doesn't allow any other third party like sip-h.323-or any other server. simply application should be like tcp/IP but also have video call feature. please guide me is study a lot about this
|
|
|
|
|
What do you already know? Do you know how to send messages over TCP/IP?
Basically, you're going to need a video stream and an audio stream. You're going to transmit the merged streams over the network. With a little bit of hard work on your part, you should be able to get some ideas from this article. A Simple C# Wrapper for the AviFile Library[^]
This space for rent
|
|
|
|
|