|
#region Using<br />
using System;<br />
using System.Collections.Generic;<br />
using Microsoft.Xna.Framework;<br />
using Microsoft.Xna.Framework.Audio;<br />
using Microsoft.Xna.Framework.Content;<br />
using Microsoft.Xna.Framework.GamerServices;<br />
using Microsoft.Xna.Framework.Graphics;<br />
using Microsoft.Xna.Framework.Input;<br />
using Microsoft.Xna.Framework.Net;<br />
using Microsoft.Xna.Framework.Storage;<br />
#endregion<br />
<br />
namespace Bouncer<br />
{<br />
#region Bouncer Game : Main<br />
public class BouncerGame : Microsoft.Xna.Framework.Game<br />
{<br />
#region Variables<br />
GraphicsDeviceManager Graphics;<br />
SpriteBatch SpriteBatch;<br />
SpriteFont SpriteFont;<br />
<br />
Player Player;<br />
StaticBlock[] StaticBlock = new StaticBlock[200];<br />
<br />
int Stage = 1;<br />
<br />
enum GameState<br />
{<br />
Title,<br />
Game,<br />
StageSelect,<br />
Help<br />
}<br />
<br />
GameState State = new GameState();<br />
#endregion<br />
<br />
#region Performance Variables<br />
int FPS,<br />
FrameCounter;<br />
<br />
TimeSpan ElapsedTime = TimeSpan.Zero;<br />
#endregion<br />
<br />
#region Initialization<br />
public BouncerGame()<br />
{<br />
Graphics = new GraphicsDeviceManager(this);<br />
Content.RootDirectory = "Content";<br />
}<br />
<br />
protected override void Initialize()<br />
{<br />
IsFixedTimeStep = false;<br />
<br />
InitializePlayer();<br />
InitializeStaticBlock();<br />
<br />
base.Initialize();<br />
}<br />
<br />
private void InitializePlayer()<br />
{<br />
Player = new Player();<br />
}<br />
<br />
private void InitializeStaticBlock()<br />
{<br />
for (int numberOfStaticBlocks = 0; numberOfStaticBlocks < 200; ++numberOfStaticBlocks)<br />
{<br />
StaticBlock[numberOfStaticBlocks] = new StaticBlock();<br />
}<br />
}<br />
#endregion<br />
<br />
#region Load<br />
protected override void LoadContent()<br />
{<br />
SpriteBatch = new SpriteBatch<br />
(GraphicsDevice);<br />
<br />
SpriteFont = Content.Load<SpriteFont><br />
("Trebuchet MS");<br />
<br />
Player.Texture_Player = Content.Load<Texture2D><br />
("BouncerSprite_Bouncer");<br />
<br />
for (int numberOfStaticBlocks = 0; numberOfStaticBlocks < 200; ++numberOfStaticBlocks)<br />
{<br />
StaticBlock[numberOfStaticBlocks].Texture_StaticBlock = Content.Load<Texture2D><br />
("BouncerSprite_StaticBlock");<br />
}<br />
}<br />
#endregion<br />
<br />
#region Unload<br />
protected override void UnloadContent()<br />
{<br />
Content.Unload();<br />
Content.Dispose();<br />
}<br />
#endregion<br />
<br />
#region Update<br />
protected override void Update(GameTime gameTime)<br />
{<br />
#region Input<br />
{<br />
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed<br />
|| Keyboard.GetState().IsKeyDown(Keys.Escape))<br />
{<br />
this.Exit();<br />
}<br />
<br />
if (GamePad.GetState(PlayerIndex.One).Buttons.LeftStick == ButtonState.Pressed)<br />
{<br />
Player.Position = new Vector2(50, 50);<br />
}<br />
<br />
Player.ForwardMovement.X = GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.X * 5;<br />
Player.ForwardMovement.Y = -GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.Y * 5;<br />
}<br />
#endregion<br />
<br />
#region World<br />
{<br />
Player.Position += Player.ForwardMovement;<br />
<br />
<br />
<br />
for (int NumberOfStaticBlocks = 0; NumberOfStaticBlocks < 150; ++NumberOfStaticBlocks)<br />
{<br />
CheckBounds(Player, StaticBlock[NumberOfStaticBlocks]);<br />
}<br />
<br />
SetStaticBlockPositions(Stage);<br />
}<br />
#endregion<br />
<br />
#region Performance<br />
{<br />
ElapsedTime += gameTime.ElapsedGameTime;<br />
<br />
if (ElapsedTime > TimeSpan.FromSeconds(0))<br />
{<br />
ElapsedTime -= TimeSpan.FromSeconds(1);<br />
FPS = FrameCounter;<br />
FrameCounter = 0;<br />
}<br />
<br />
FrameCounter++;<br />
}<br />
#endregion<br />
<br />
base.Update(gameTime);<br />
}<br />
#endregion<br />
<br />
#region Draw<br />
protected override void Draw(GameTime gameTime)<br />
{<br />
Graphics.GraphicsDevice.Clear<br />
(Color.Gray);<br />
<br />
SpriteBatch.Begin();<br />
{<br />
#region Performance<br />
SpriteBatch.DrawString<br />
(SpriteFont, "Vector: " + Player.Position.ToString(), new Vector2(150, 50), Color.White);<br />
<br />
SpriteBatch.DrawString<br />
(SpriteFont, "Y Value: " + Player.ForwardMovement.Y / 2, new Vector2(450, 50), Color.White);<br />
<br />
if (FPS > 60)<br />
{<br />
SpriteBatch.DrawString<br />
(SpriteFont, "FPS: " + FPS, new Vector2(50, 50), Color.White);<br />
}<br />
<br />
if (FPS == 60)<br />
{<br />
SpriteBatch.DrawString<br />
(SpriteFont, "FPS: " + FPS, new Vector2(50, 50), Color.Gainsboro);<br />
}<br />
<br />
if (FPS < 60<br />
&& FPS >= 30)<br />
{<br />
SpriteBatch.DrawString<br />
(SpriteFont, "FPS: " + FPS, new Vector2(50, 50), Color.DarkGray);<br />
}<br />
<br />
if (FPS < 30)<br />
{<br />
SpriteBatch.DrawString<br />
(SpriteFont, "FPS: " + FPS, new Vector2(50, 50), Color.DimGray);<br />
}<br />
<br />
if (FPS <= 5)<br />
{<br />
SpriteBatch.DrawString<br />
(SpriteFont, "FPS: " + FPS, new Vector2(50, 50), Color.Black);<br />
}<br />
#endregion<br />
<br />
#region Game<br />
Player.DrawPlayer<br />
(SpriteBatch, Player.Texture_Player);<br />
<br />
for (int numberOfStaticBlocks = 0; numberOfStaticBlocks < 150; ++numberOfStaticBlocks)<br />
{<br />
StaticBlock[numberOfStaticBlocks].DrawStaticBlock<br />
(SpriteBatch, StaticBlock[numberOfStaticBlocks].Texture_StaticBlock);<br />
}<br />
#endregion<br />
}<br />
SpriteBatch.End();<br />
<br />
base.Draw(gameTime);<br />
}<br />
#endregion<br />
<br />
#region Setting Static Block Positions<br />
void SetStaticBlockPositions(int currentStage)<br />
{<br />
switch (Stage)<br />
{<br />
case 1:<br />
{<br />
#region Static Block Positions<br />
StaticBlock[0].Position = new Vector2(0, 0);<br />
StaticBlock[1].Position = new Vector2(0, 25);<br />
StaticBlock[2].Position = new Vector2(0, 50);<br />
StaticBlock[3].Position = new Vector2(0, 75);<br />
StaticBlock[4].Position = new Vector2(0, 100);<br />
StaticBlock[5].Position = new Vector2(0, 125);<br />
StaticBlock[6].Position = new Vector2(0, 150);<br />
StaticBlock[7].Position = new Vector2(0, 175);<br />
StaticBlock[8].Position = new Vector2(0, 200);<br />
StaticBlock[9].Position = new Vector2(0, 225);<br />
StaticBlock[10].Position = new Vector2(0, 250);<br />
StaticBlock[11].Position = new Vector2(0, 275);<br />
StaticBlock[12].Position = new Vector2(0, 300);<br />
StaticBlock[13].Position = new Vector2(0, 325);<br />
StaticBlock[14].Position = new Vector2(0, 350);<br />
StaticBlock[15].Position = new Vector2(0, 375);<br />
StaticBlock[16].Position = new Vector2(0, 400);<br />
StaticBlock[17].Position = new Vector2(0, 425);<br />
StaticBlock[18].Position = new Vector2(0, 450);<br />
StaticBlock[19].Position = new Vector2(0, 475);<br />
StaticBlock[20].Position = new Vector2(0, 500);<br />
StaticBlock[21].Position = new Vector2(0, 525);<br />
StaticBlock[22].Position = new Vector2(0, 550);<br />
StaticBlock[23].Position = new Vector2(0, 575);<br />
<br />
StaticBlock[24].Position = new Vector2(775, 0);<br />
StaticBlock[25].Position = new Vector2(775, 25);<br />
StaticBlock[26].Position = new Vector2(775, 50);<br />
StaticBlock[27].Position = new Vector2(775, 75);<br />
StaticBlock[28].Position = new Vector2(775, 100);<br />
StaticBlock[29].Position = new Vector2(775, 125);<br />
StaticBlock[30].Position = new Vector2(775, 150);<br />
StaticBlock[31].Position = new Vector2(775, 175);<br />
StaticBlock[32].Position = new Vector2(775, 200);<br />
StaticBlock[33].Position = new Vector2(775, 225);<br />
StaticBlock[34].Position = new Vector2(775, 250);<br />
StaticBlock[35].Position = new Vector2(775, 275);<br />
StaticBlock[36].Position = new Vector2(775, 300);<br />
StaticBlock[37].Position = new Vector2(775, 325);<br />
StaticBlock[38].Position = new Vector2(775, 350);<br />
StaticBlock[39].Position = new Vector2(775, 375);<br />
StaticBlock[40].Position = new Vector2(775, 400);<br />
StaticBlock[41].Position = new Vector2(775, 425);<br />
StaticBlock[42].Position = new Vector2(775, 450);<br />
StaticBlock[43].Position = new Vector2(775, 475);<br />
StaticBlock[44].Position = new Vector2(775, 500);<br />
StaticBlock[45].Position = new Vector2(775, 525);<br />
StaticBlock[46].Position = new Vector2(775, 550);<br />
StaticBlock[47].Position = new Vector2(775, 575);<br />
<br />
StaticBlock[48].Position = new Vector2(25, 575);<br />
StaticBlock[49].Position = new Vector2(50, 575);<br />
StaticBlock[50].Position = new Vector2(75, 575);<br />
StaticBlock[51].Position = new Vector2(100, 575);<br />
StaticBlock[52].Position = new Vector2(125, 575);<br />
StaticBlock[53].Position = new Vector2(150, 575);<br />
StaticBlock[54].Position = new Vector2(175, 575);<br />
StaticBlock[55].Position = new Vector2(200, 575);<br />
StaticBlock[56].Position = new Vector2(225, 575);<br />
StaticBlock[57].Position = new Vector2(250, 575);<br />
StaticBlock[58].Position = new Vector2(275, 575);<br />
StaticBlock[59].Position = new Vector2(300, 575);<br />
StaticBlock[60].Position = new Vector2(325, 575);<br />
StaticBlock[61].Position = new Vector2(350, 575);<br />
StaticBlock[62].Position = new Vector2(375, 575);<br />
StaticBlock[63].Position = new Vector2(400, 575);<br />
StaticBlock[64].Position = new Vector2(425, 575);<br />
StaticBlock[65].Position = new Vector2(450, 575);<br />
StaticBlock[66].Position = new Vector2(475, 575);<br />
StaticBlock[67].Position = new Vector2(500, 575);<br />
StaticBlock[68].Position = new Vector2(525, 575);<br />
StaticBlock[69].Position = new Vector2(550, 575);<br />
StaticBlock[70].Position = new Vector2(575, 575);<br />
StaticBlock[71].Position = new Vector2(600, 575);<br />
StaticBlock[72].Position = new Vector2(625, 575);<br />
StaticBlock[73].Position = new Vector2(650, 575);<br />
StaticBlock[74].Position = new Vector2(675, 575);<br />
StaticBlock[75].Position = new Vector2(700, 575);<br />
StaticBlock[76].Position = new Vector2(725, 575);<br />
StaticBlock[77].Position = new Vector2(750, 575);<br />
<br />
StaticBlock[78].Position = new Vector2(25, 0);<br />
StaticBlock[79].Position = new Vector2(50, 0);<br />
StaticBlock[80].Position = new Vector2(75, 0);<br />
StaticBlock[81].Position = new Vector2(100, 0);<br />
StaticBlock[82].Position = new Vector2(125, 0);<br />
StaticBlock[83].Position = new Vector2(150, 0);<br />
StaticBlock[84].Position = new Vector2(175, 0);<br />
StaticBlock[85].Position = new Vector2(200, 0);<br />
StaticBlock[86].Position = new Vector2(225, 0);<br />
StaticBlock[87].Position = new Vector2(250, 0);<br />
StaticBlock[88].Position = new Vector2(275, 0);<br />
StaticBlock[89].Position = new Vector2(300, 0);<br />
StaticBlock[90].Position = new Vector2(325, 0);<br />
StaticBlock[91].Position = new Vector2(350, 0);<br />
StaticBlock[92].Position = new Vector2(375, 0);<br />
StaticBlock[93].Position = new Vector2(400, 0);<br />
StaticBlock[94].Position = new Vector2(425, 0);<br />
StaticBlock[95].Position = new Vector2(450, 0);<br />
StaticBlock[96].Position = new Vector2(475, 0);<br />
StaticBlock[97].Position = new Vector2(500, 0);<br />
StaticBlock[98].Position = new Vector2(525, 0);<br />
StaticBlock[99].Position = new Vector2(550, 0);<br />
StaticBlock[100].Position = new Vector2(575, 0);<br />
StaticBlock[101].Position = new Vector2(600, 0);<br />
StaticBlock[102].Position = new Vector2(625, 0);<br />
StaticBlock[103].Position = new Vector2(650, 0);<br />
StaticBlock[104].Position = new Vector2(675, 0);<br />
StaticBlock[105].Position = new Vector2(700, 0);<br />
StaticBlock[106].Position = new Vector2(725, 0);<br />
StaticBlock[107].Position = new Vector2(750, 0);<br />
#endregion<br />
}<br />
break;<br />
}<br />
}<br />
#endregion<br />
<br />
#region Collision<br />
public void CheckBounds(Player player, StaticBlock block)<br />
{<br />
if (GamePad.GetState(PlayerIndex.One).ThumbSticks.Left.X < 0)<br />
{<br />
if (player.Position.X < block.Position.X + 25<br />
&& player.Position.X + 25 > block.Position.X)<br />
{<br />
player.Position.X = block.Position.X + 25;<br />
}<br />
}<br />
}<br />
#endregion<br />
}<br />
#endregion<br />
<br />
#region Player<br />
public class Player<br />
{<br />
public Texture2D Texture_Player;<br />
<br />
public Vector2 Position = new Vector2(50, 50),<br />
ForwardMovement;<br />
<br />
public float Rotation = 0.0f;<br />
<br />
public void DrawPlayer(SpriteBatch spriteBatch, Texture2D player)<br />
{<br />
spriteBatch.Draw<br />
(player, Position, null, Color.White, 0, new Vector2(0, 0), .5f, SpriteEffects.None, 1);<br />
}<br />
}<br />
#endregion<br />
<br />
#region Flare<br />
public class Flare<br />
{<br />
public Texture2D Texture_Flare;<br />
<br />
public Vector2 Position,<br />
ForwardMovement;<br />
<br />
public void DrawFlare(SpriteBatch spriteBatch, Texture2D flare)<br />
{<br />
spriteBatch.Draw<br />
(flare, Position, Color.White);<br />
}<br />
}<br />
#endregion<br />
<br />
#region Static Block<br />
public class StaticBlock<br />
{<br />
public Texture2D Texture_StaticBlock;<br />
<br />
public Vector2 Position;<br />
<br />
public void DrawStaticBlock(SpriteBatch spriteBatch, Texture2D staticBlock)<br />
{<br />
spriteBatch.Draw<br />
(staticBlock, Position, Color.White);<br />
}<br />
}<br />
#endregion<br />
}<br />
Can anyone help me with this monster? I want to be able to do collision detection for ALL OF my StaticBLocks (with the Player: BTW both 25X25) and make them not move in the direction they are bumping. I can do collision for 1 block, but how would I do this for all 200?
- I love D-flat!
- Need. More. Code.
|
|
|
|
|
Hi,
I don't think we needed all that code to try and answer the question at the bottom...
I once did multi-object collision by drawing everything in a hidden bitmap, using:
- two colors only (empty and filled);
- reduced resolution (if everything is a multiple of 25, then divide all coordinates by 25).
In such a bitmap you can detect possible moves and collisions before you apply them to the
"real world". You may want to use more than two colors, say one for empty and one for each
of the objects, that way you know immediately with which object you are going to collide.
Final remark: it does not have to be a real Bitmap and GDI+ operations, you could simply use a
two-dimensional array and manipulate the "pixels" yourself, removing a rectangular object
is a simple clear in two nested fors, adding it at a (slightly) different position is similar.
Collision detection can be handled by just peeking at the intended new positions of the
leading edges.
BTW: nevertheless I like to do it in a paintable way, and for debugging purposes I have
a checkbox that chooses to show either the real world or the simulated world, at the same
location on screen (rescaled to undo the reduced resolution); doing so any bugs become
noticeable right away.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
Does GDI and such apply fo XNA?
And thank you for your reply, even if I have some trouble with it.
Another Possible Way?:
Is there a way to check collisions with all of the StaticBlocks with a for loop with good performance results? I tried something like this, but the framerate dipped to around 10...
- I love D-flat!
- Need. More. Code.
|
|
|
|
|
MasterSharp wrote: Does GDI and such apply fo XNA?
I don't know. Anyway, I told you you don't really need GDI+, a 2D array and some simple loops
is sufficient.
Furthermore if XNA does not support GDI+, it must have another way to create and operate on
bitmaps without showing them all the time.
Luc Pattyn [Forum Guidelines] [My Articles]
This month's tips:
- before you ask a question here, search CodeProject, then Google;
- the quality and detail of your question reflects on the effectiveness of the help you are likely to get;
- use PRE tags to preserve formatting when showing multi-line code snippets.
|
|
|
|
|
OK, thanks, Luc!
- I love D-flat!
- Need. More. Code.
|
|
|
|
|
Typically you'd store your scene data in a quadtree setup which would let you pick out all the StaticBlocks that are relevant to your player (in the same region). Then its fairly trivial to check if two squares will intersect...
|
|
|
|
|
Hi, I have run into a small problem reading text from a file.
Consider this line below as part of the source file.
(Code 1956, § 486.01)
I'm using the good old Streamreader to read the file.
string line = sourceStreamReader.ReadLine();
When this line executes on the above source line the "Section" character " §" is read as char 65533.
I've declare the streamreader as follows.
<br />
StreamReader sourceStreamReader = new StreamReader(sourceFiles[i].ToString());<br />
System.Diagnostics.Debug.WriteLine(sourceStreamReader.CurrentEncoding.EncodingName);<br />
the output from the debug line tells me thats its UTF-8 encoding, but the "section" character is not read nor writes as its original value.
Can someone please tell me where I went wrong!
Just because we can; does not mean we should.
|
|
|
|
|
As it turns out, changing the code to the listing below resolved my issue.
<br />
FileStream fStream = File.OpenRead(sourceFiles[i].ToString());<br />
byte[] buffer = new byte[fStream.Length];<br />
int bytesRead;<br />
bytesRead = fStream.Read(buffer, 0, buffer.Length);<br />
<br />
<br />
fStream.Close();<br />
Decoder decoder = Encoding.Default.GetDecoder();<br />
char[] cBuffer = new char[buffer.Length];<br />
int bytesConverted, charsConverted;<br />
bool bCompleted;<br />
<br />
decoder.Convert(buffer, 0, buffer.Length, cBuffer, 0, buffer.Length, false, out bytesConverted, out charsConverted, out bCompleted);<br />
Just because we can; does not mean we should.
|
|
|
|
|
KaptinKrunch wrote: changing the code to the listing below resolved my issue.
That means that the file is not at all Unicode, but ANSI.
KaptinKrunch wrote: bytesRead = fStream.Read(buffer, 0, buffer.Length);
Ouch. You read from the file, but you ignore the result. The Read method doesn't have to read as much data as you request. You have to loop until all data is read, or the method return zero.
The easiest is of course to just replace all that code with:
string text = File.ReadAllText(sourceFiles[i].ToString(), Encoding.Default);
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Hi all,
Any one suggest me how to get a file from a folder using the partial file name. It's similar to wildcard search in database.
For eg:
in my folder there are files with following name.
sample_text.txt, sample_data.txt,samplefile,data_text.txt
in the above files i have to get the file list which name starts with sample_ like this.
is it possible to do this using regular expression?
Please suggest me
Thanks in advance
Know is Drop, Unknown is Ocean
|
|
|
|
|
Use the System.IO.Directory.GetFiles() method. Set your search expression to 'sample_*.*'.
Paul Marfleet
"No, his mind is not for rent
To any God or government"
Tom Sawyer - Rush
|
|
|
|
|
Thank you very much for your replay. I tried the above suggestion. But it returning me Illegal Charter path error.
My sample code:
string filenamesss = Directory.GetFiles("c:\\samplefiles\\20*.pdf");
Know is Drop, Unknown is Ocean
|
|
|
|
|
Try this if the documentation you read does not make it clear. BTW, Directory.GetFiles returns a string array!
string[] filenamesss = Directory.GetFiles("c:\\samplefiles\\", "*.PDF", System.IO.SearchOption.TopDirectoryOnly);
OR
<br />
string[] filenamesss = Directory.GetFiles("c:\\samplefiles\\", "*.PDF", System.IO.SearchOption.AllDirectories);
Just because we can; does not mean we should.
|
|
|
|
|
|
Hi gareth,
Thousands of thanks to you. It's really working good. also i got an chance to learn more things from that link.
Thank you once again to all
Know is Drop, Unknown is Ocean
|
|
|
|
|
Is it possible to create static extension methods in the latest .Net framework? I presently have the following scenario:
I have a bottom level project, call it Base, that defines some objects that
are common accross multiple solution files (lets use UInt128 as an example)
I have a Web Service API project, call it WebAPI, that only contains a web reference
I have a main project file, call it Main, that has a reference to both Base and WebAPI The problem is that WebAPI contains a class, WebAPI.UInt128, that is logically equivalent to Base.UInt128. Now, I want to add an explicit operator to case a WebAPI.UInt128 into a Base.UInt128 and back. Since neither the WebAPI nor the Base projects have a reference to both types, I wanted to define this operator in the place that makes the most sence, which is within the Main project. Is there some way to do this? Thanks in advance,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Yes with framework 3.5 you can create extension methods. Although I would think it better to define it in base and have WebAPI use that reference. Creating a class with the same name in different namespaces, with presumably different functionality will lead to confusing code that is difficult to maintain.
only two letters away from being an asset
|
|
|
|
|
I actually don't create two different classes with the same name... Visual Studio does it for me. Basically, the WebAPI.UInt128 only contains the serialized data from within the Base.UInt128 class, even though both are logically equivalent. However, since the WebAPI is automatically generated and in actuallity does not depend on Base, I should not need to add that reference to the WebAPI project. For a client that DOES have access to both WebAPI and Base, that client should be able to use either UInt128 class interchangeably. That is why I asked for such a thing.
Mark Nischalke wrote: Yes with framework 3.5 you can create extension methods.
Could you please provide an example of how I would declare the following from within the Main project? I am having a hard time finding any documentation describing how to externally define static extension methods.
public static explicit operator WebAPI.UInt128(Base.UInt128 other) { ... } Thanks,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Extension methods are created as static methods on static classes with the this keyword in front of the first parameter. For instance, suppose you want to check that a string isn't empty, and that it isn't just made up of spaces then you could use this:
public static class StringExtensions
{
public static bool IsTrimmedNullOrEmpty(this string value)
{
bool returnValue = false;
if (string.IsNullOrEmpty(value) || value.Trim() == string.Empty)
returnValue = true;
return returnValue;
}
} Then you would just call this with
string myString = " ";
if (myString.IsTrimmedNullOrEmpty())
{
Console.WriteLine("This is an empty string");
}
|
|
|
|
|
I have seen examples of such a thing plenty of times online. However, what I am attempting to do is add a type cast operator, which would be a static method in the string class. Your example is actually perfect for what I am trying to do, as myString CANNOT be null given that you added an instance call. Therefore, in the example you gave, is there a way to define a method identical to what you proposed, but that would be called in the following way (so that myString could actually be null without throwing an exception):
if (string.IsTrimmedNullOrEmpty(myString)) { ... } Thanks,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
You can't make extension operators. Even if you make them manually (with ExtensionAttribute and SpecialNameAttribute) the compiler doesnt pick them up.
|
|
|
|
|
That was my suspicion, but I wanted to be certain prior to proceeding. Thanks for your help,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
I have seen code like this what does new is doing on the declaration of this function. Is it better to define this way or it's some kind of shortcut. Thanks
public Class A:UserControl
{
public new int Width
{
}
}
|
|
|
|
|
netJP12L wrote: what does new is doing on the declaration of this function.
They hide that information in the documentation[^]
led mike
|
|
|
|
|
I have a custom string being spit out from a log file that I would like make into a DateTime object.
The problem is I have no idea how to do this simply.
Mon Feb 25 07:21:00 2008
The string does not parse straight to a DateTime object and I do not have anyway of changing the format of the incoming string.
|
|
|
|
|